Android 项目(一):网络请求封装(一)

来源:互联网 发布:北京全国接单淘宝贷款 编辑:程序博客网 时间:2024/06/06 02:42

  单独的使用网络连接相信大家都一看就懂,一看就会,但是在实际项目中感觉然并卵啊!我们不可能在每个需要网络请求的界面都写个网络请求,那样不仅代码量增多且重复,因此要想个办法将所有的网络请求提取出来,每当有页面需要网络请求就调用同一个方法,方便简洁。

一、网络状态

这一部分不进行详细介绍,书上网上都有许多类似的代码不进行赘述。

public class NetWorkDect  {    private static   NetworkInfo networkInfo;    private static ConnectivityManager mConnectivityManager;    //该方法用于返回当前是否有网络    public static boolean checkNetworkState(){        if (BaseApplication.getBaseApplication() != null) {             mConnectivityManager = (ConnectivityManager) BaseApplication.getBaseApplication()                    .getSystemService(BaseApplication.getBaseApplication().CONNECTIVITY_SERVICE);           networkInfo = mConnectivityManager.getActiveNetworkInfo();            //1.判断是否有网络连接            boolean networkAvailable = networkInfo.isAvailable();                  return networkAvailable;        }        return false ;    }      //该方法用于获取当前网络连接的类型信息    public String typeNetwork(){        if(networkInfo!=null){            int networkType = networkInfo.getType();            if(ConnectivityManager.TYPE_WIFI == networkType){                //当前为wifi网络                return "当前为wifi";            }else if(ConnectivityManager.TYPE_MOBILE == networkType){                //当前为mobile网络                return "当前为流量";            }        }        return "当前无网络";    }}

ps:注意添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

网络请求的封装与使用

网络请求的封装

这里采用Volley的请求方式进行简单的封装介绍。
思路:
1、采用单例(私有化构造器、公有的对象,公有的获得对象的方法),使得以后整个App的网络请求仅由一个实例进行,不会创建多个对象。

public class HttpUtils {    //Volley方式的请求队列    private RequestQueue requestQueue;   //私有化构造器    private HttpUtils() {        requestQueue = Volley.newRequestQueue(BaseApplication.getBaseApplication());    }    //公有的属性    private static HttpUtils mHttpUtils;    //公有的获得对象的方法也即单例,不然会浪费资源    public static synchronized HttpUtils newInstance() {        if (mHttpUtils == null) {            mHttpUtils = new HttpUtils();        }        return mHttpUtils;    }    //观察者模式,注意这里是public    public interface onMyHttpListener {        void onSuccess(String response);        void onFialed(String error);        void onNoNetWork();    }     //添加请求的方法    public void addStringRequest(String url, HashMap<String, String> params, final onMyHttpListener listener) {       //判断是否有网络        if (!NetWorkDect.checkNetworkState()) {            listener.onNoNetWork();        } else {            final StringRequest request = new StringRequest(url, new Response.Listener<String>() {                @Override                public void onResponse(String response) {                    listener.onSuccess(response);                }            }, new Response.ErrorListener() {                @Override                public void onErrorResponse(VolleyError error) {                    listener.onFialed(error.toString());                }            });            requestQueue.add(request);        }    }}

网络请求的使用

public class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        HashMap<String,String> params=new HashMap<>();        HttpUtils.newInstance().addStringRequest("http://www.baidu.com", params, new HttpUtils.onMyHttpListener() {            @Override            public void onSuccess(String response) {            }            @Override            public void onFialed(String error) {            }            @Override            public void onNoNetWork() {            }        });    }}

补充BaseApplication:

public class BaseApplication extends Application {    public static BaseApplication baseApplication;    @Override    public void onCreate() {        super.onCreate();        baseApplication=BaseApplication.this;    }    public static BaseApplication getBaseApplication() {        return baseApplication;    }}
2 0
原创粉丝点击