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

本文介绍了如何通过封装网络请求简化代码实现,包括网络状态检查、请求类型判断等实用功能,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一、网络状态

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

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值