[我是一名Android初学者。我想知道为什么我们应该在代码中使用RequestQueue并将JsonObjectRequest传递给RequestQueue作为参数。
[当您使用Volley时,RequestQueue将使您的请求在工作线程上排队,然后将响应传递到主线程。之所以需要它,是因为如果您的应用程序面向Honeycomb SDK或更高版本,则不允许在主线程上执行网络操作。因此,您将不会得到NetworkOnMainThreadException。
Volley使用两个类,RequestQueue和Request
RequestQueue是所有必须排队执行的请求的地方,它还管理工作线程并在后台保持网络通话它也处理读写缓存以及解析响应并将解析后的响应传递到主线程。
请求是构建网络请求的地方。请求对象有3个主要请求:
JsonObjectRequest —在给定URL上检索JSONObject响应主体的请求。JsonArrayRequest —用于从服务器检索JSON数组。
请求接受3个传递给构造函数的参数。
同时实现JsonObjectRequest和JsonArrayRequest的代码段如下:
String mJSONURLString= "json_url"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, mJSONURLString, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); //add JsonObjectRequest request to queue requestQueue.add(jsonObjectRequest); JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); //add JsonArrayRequest to queue requestQueue.add(jsonArrayRequest);
StringRequest —从服务器检索响应主体作为String。
代码段如下:
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // Do something with the response } },
- ImageRequest-要从服务器接收图像,网络调用的结构与其他网络请求类似。
代码段如下:
String mImageURLString= "";
ImageRequest imageRequest = new ImageRequest(mImageURLString= , new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
// Assign the response to an ImageView
ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(response);
}
}, 0,0, null);//Image width,Image height
//add request to queue
requestQueue.add(imageRequest);