Volley简单封装及使用

这是一个volley封装的demo,封装思路来自一个同事,我做了一点简单的修改。

网络请求的实现类:

public class BaseRequest {
    public static void StringRequestPost(final Context mContext, final int id, final String url,
                                         String tag, final Map<String, String> params,
                                         final RequestResponse vif) {
        BaseApplication.getHttpQueues().cancelAll(tag);
        StringRequest stringrequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Log.d("onResponse-->", mContext.getResources().getString(id) + "==>" + s);
                vif.success(id, s);//通过id区分不同的网络请求
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.e("onErrorResponse", mContext.getResources().getString(id) + "==>" + volleyError.toString());
                vif.error(id, volleyError);//通过id区分不同的网络请求
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                return params;//可以在return 传入的参数前进行一些统一的操作,比如加入时间戳并生成接口验证的签名
            }
        };
        stringrequest.setTag(tag);
        BaseApplication.getHttpQueues().add(stringrequest);
    }
}
网络请求的管理类
public class MyNetRequest {
    
    private Context context = BaseApplication.getContext();

    public void requestPost(int id, String url, Map<String, String> params, RequestResponse response) {
        BaseRequest.StringRequestPost(context, id, url, "volley" + id, params, response);
    }
    
}

网络响应的接口:

public interface RequestResponse {
    void success(int id, String response);
    void error(int id, VolleyError error);
}

接口地址的存放:

public class Url {
    public static String get_city_weather = "https://www.apiopen.top/weatherApi";//网上免费开放的天气获取接口
}
自定义的Application:
public class BaseApplication extends Application {
    private static Context mContext;
    private static RequestQueue queues;//volley的请求队列
    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
        queues = Volley.newRequestQueue(mContext);
    }

    public static Context getContext() {
        return mContext;
    }

    public static RequestQueue getHttpQueues() {
        return queues;
    }
}
activity页面:

public class MainActivity extends AppCompatActivity {

    private TextView tv_content;
    private AllListener allListener = new AllListener();
    private MyNetRequest request = new MyNetRequest();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViewAndEvent();
    }

    private void initViewAndEvent() {
        tv_content = findViewById(R.id.tv_content);

        findViewById(R.id.btn).setOnClickListener(allListener);
    }

   
private void doNetWorkById(int id) {
    Map<String, String> params = new HashMap<>();
    switch (id) {
        case R.string.get_city_weather:
            params.put("city", "杭州");
            request.requestPost(id, Url.get_city_weather, params, allListener);
            break;
    }
}
    private class AllListener implements View.OnClickListener, RequestResponse {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn:
                    doNetWorkById(R.string.get_city_weather);
                    break;
            }
        }

        @Override
        public void success(int id, String response) {
            try {
                JSONObject jsonObject = new JSONObject(response);
                StringBuilder builder = new StringBuilder();
                builder.append("杭州实时温度为-->").append(jsonObject.getJSONObject("data").getString("wendu")).append("摄氏度");
                tv_content.setText(builder.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void error(int id, VolleyError error) {

        }
    }
新建一个strings-network文件专门存放网络请求的id和对应的接口描述

 

log输出



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值