Volley 的是使用以及接口

说点别的:对于callback的概念及意义。维基百科是这么解释:将一段代码作为參数传递,而这段代码将会在某个时刻被运行;
个人理解就是:为了代码整洁。为了方便调用并运行一些不在同一个java文件里的变量和函数;为了便于对外留出接口,便于后期加入新功能;

/**

  • 先简介一下三个类的作用:
  • Volley.java:Volley对外暴露的主类,通过 newRequestQueue(…) 函数新建并启动一个请求队列RequestQueue。
  • Request:请求的抽象类。StringRequest、JsonRequest、ImageRequest 都是它的子类,表示某种类型的请求。可扩展性强。
  • RequestQueue.java:请求队列,里面包含一个CacheDispatcher(用于处理走缓存请求的调度线程)、
    NetworkDispatcher数组(用于处理走网络请求的调度线程),一个ResponseDelivery(返回结果分发接口),
    通过 start() 函数启动时会启动CacheDispatcher和NetworkDispatchers。
  • 接下来再回头看一下Volley的架构图。
  • 第一步:把请求加入缓存队列
  • 第二步:「缓存调度线程」CacheDispatcher从缓存队列中取出一个请求,如果缓存命中,就读取缓存响应并解析,然后将结果返回到主线程
  • 第三步:缓存未命中,请求被加入网络请求队列,「网络调度线程」NetworkDispatcher轮询取出请求,HTTP请求传输,解析响应,写入缓存,然后将结果返回到主线程
    */

举例:
public class MainActivity extends AppCompatActivity {
private static final String TAG = “lcj MainActivity”;
TextView requestNetTv;
TextView showNetContentTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
requestNetTv = findViewById(R.id.request_net);
showNetContentTv = findViewById(R.id.show_net_content);
requestNetTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// requestNet();
VolleyHttpUtils.requestNet(
“https://www.baidu.com”,
MainActivity.this,
new VolleyHttpUtils.OnHttpListener() { // 设置监听
@Override
public void onResponse(String response) {
Log.i(TAG, “onResponse response:” + response);
Log.i(TAG, “onResponse threadName:” + Thread.currentThread().getName());
showNetContentTv.setText(response);
}
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, “onErrorResponse error:” + error.getMessage());
}
}
);
}
});
}
private void requestNet() {
// 第一步,利用Volley new出来一个请求队列
RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);
// 第二步,创建一个请求
// 在这里,我们需要关心的就是请求到底是成功还是失败。就这两点。可以利用接口封装起来。
StringRequest stringRequest = new StringRequest(
“https://www.baidu.com”, // 请求url
new Response.Listener() { // 返回正确结果的监听
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this, “访问成功”, Toast.LENGTH_SHORT).show();
showNetContentTv.setText(response);
}
},
new Response.ErrorListener() { // 返回错误结果的监听
@Override
public void onErrorResponse(VolleyError error) {
Log.i(TAG, “onErrorResponse error:” + error.getMessage());
}
});
// 第三步,把请求放进队列
mQueue.add(stringRequest);
}
}

public class VolleyHttpUtils {
private static final String TAG = “lcj VolleyHttpUtils”;
// 外界除了传入必要的url和上下文之外,最关键的就是要实现我们的接口,这样外界就能方便地交待工作给我们
// 我们不能把东西写死,需要让调用者有一定的自由,他具体想干嘛让他自己去具体发挥,然后真正工作的还是我们自己
public static void requestNet(String url, Context context, final OnHttpListener onHttpListener) {
// 第一步:创建队列
RequestQueue mQueue = Volley.newRequestQueue(context);
Log.i(TAG, “requestNet threadName:” + Thread.currentThread().getName());
// 第二步:创建请求对象
StringRequest stringRequest = new StringRequest(url,
new Response.Listener() {
@Override
public void onResponse(String response) {
Log.i(TAG, “requestNet 2 threadName:” + Thread.currentThread().getName());
// 外界实现接口交待的关于请求的成功的代码在此处被真正执行
onHttpListener.onResponse(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 外界实现接口交待的关于请求的失败的代码在此处被真正执行
onHttpListener.onErrorResponse(error);
}
});
// 第三步:将请求队列添加到请求队列中
mQueue.add(stringRequest);
}
interface OnHttpListener {
void onResponse(String response);
void onErrorResponse(VolleyError error);
}
}

打印结果:在这里插入图片描述

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值