volley为我们提供了更简单,更快,更健壮的方法来处理一些频繁且小的网络通讯,比如获取json,获取字符串,获取图片
首先导入volley这个jar包
一 获取json
学过安卓网络通信的人都知道http请求有两种方法,get和post,他们的区别不多说
可以直接在oncreate里写,但为了整洁我们通常会新建方法,把内容写在外面的方法里。
注:以下的url和传入的参数要改为自己的
首先新建一个方法
然后实例化一个RequestQueue
RequestQueue rq=Volley.newRequestQueue(this);
然后如果是gei方法()
JsonObjectRequest jsonObjectRequest =new JsonObjectRequest("http://119.29.136.149:8080/secret.jsp", null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("TAG", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
如果是post方法
JsonObjectRequest jsonObjectRequest =new JsonObjectRequest(Request.Method.POST, "http://119.29.136.149:8080/secret.jsp", null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("TAG", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("action", "send_pass");
return map;
}
};
就是在参数里加入post方法和多了个 getParams方法,把map参数传进去
最后别忘了把这个jsonObjectRequest添加到RequestQueue里,不然不会执行
rq.add(jsonObjectRequest);
二 获取字符串
获取字符串和获取json大同小异,就是onResponse里面返回的参数类型不同而已
get方法获取字符串
RequestQueue rq=Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest("http://119.29.136.149:8080/secret.jsp",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
rq.add(stringRequest);
private void getJSONVolley() {
RequestQueue rq=Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST,"http://119.29.136.149:8080/secret.jsp",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("action", "send_pass");
return map;
}
};
rq.add(stringRequest);
三 获取图片
volley给我们提供了一个 NetworkImageView控件
实现的方法也比较简单
要先在layout里添加这个控件
然后在主方法里获取这个控件
private NetworkImageView iv2;
iv2= (NetworkImageView) findViewById(R.id.iv2);
String imageurl="http://119.29.136.149:8080/1.jpg";
RequestQueue rq=Volley.newRequestQueue(this);
final LruCache<String,Bitmap> lrucache=new LruCache<String, Bitmap>(20);
ImageLoader.ImageCache imagecache=new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String s) {
return lrucache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
lrucache.put(s,bitmap);
}
};
ImageLoader imageloader =new ImageLoader(rq,imagecache);
iv2.setImageUrl(imageurl,imageloader);
}
这个方法实现了缓存的功能。