Volley在是一个非常轻便的框架。无论是数据的获取或者图片的加载,都是不二选择。但是Volley不适合上传和下载,那么Volley怎么样使用呢。结下来了我们一一道来。
首先我们要下载Volley的 .jar的。
第一步:我们要建立一个全局的请求队列。
import android.app.Application;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
//这个类我们要继承Application
public class MyApplication extends Application { //Application 请求的意思
public static RequestQueue queue;
@Override
public void onCreate() {
super.onCreate();
queue= Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getHttpQueues(){ //暴露出一个方法
return queue;
}
}
请求队列完成以后,我们要把这个请求队列放在XML的清单文件里面。
直接android:name="写了请求队列的那个类的路径"
图片
对面还要加一个网络权限。
<uses-permission android:name="android.permission.INTERNET"/>
当然我们请求数据时会有三种接收的方式。
StringRequest 对返回结果不认识(其中包括后面的两个)
JsonObjectRequest 对json的数据进行接收
JsonArrayRequest
第二步:我们先写git请求数据。
git比post请求数据要简单。因为post的参数要通过HashMap集合来传过去!
private void volley_Get() {
String url="http://www.baidu.com"; //访问数据的url的接口地址。
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {//因为返回的类型不确
//定,所以我们先用StringRequest来接收。里面的四个参数分别表示 请求的方式、请求的地址、请求成功的回调、请求失败的回调
@Override
public void onResponse(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError s) {
Toast.makeText(MainActivity.this,s.toString()+"请求失败",Toast.LENGTH_SHORT).show();
}
});
request.setTag("adcGet"); //这里要设置标签的主要的作用是为了ativity关闭的时候,取消这个请求对列。
MyApplication.getHttpQueues().add(request);//把请求的结果放到请求队列中。
}
第三步:接下来我们来写Post请求数据吧
String url="http://apis.juhe.cn/mobile/get?";//请求的网站(由于我们用post请求,所以我们
//参数不能直接写在里面,我们要通过 Map 集合 过来
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
//与git请求一样,里面也有四个参数,第一个是请求的方式、请求的url地址、请求成功的回调、请求失败的回调
//与git不同的是post的参数传递是在下面的Map集合里面。
@Override
public void onResponse(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError s) {
Toast.makeText(MainActivity.this,s.toString(),Toast.LENGTH_LONG).show();
}
}){//getParams()方法;用户在Volley中使用post方式请求数据中参数的传递。
@Override
protected Map<String, String> getParams() throws AuthFailureError { //系统的会自动调用hashMap里面的两个参数。后面是{ // getParams 就会出现 }
Map<String,String> hashMap=new HashMap<String,String>();
hashMap.put("phone","18814873858");
hashMap.put("key","335abcc4e891ba4e4be6d7534fd54c5d");
return hashMap;//请求的时候会自动调用hashMap的参数。
}
};
request.setTag("abcPOST");//为onStop()方法设置标签,以便好关闭。
MyApplication.getHttpQueues().add(request);//请求队列
第四步:在activity的onStop()方法里面,取消请求队列。
@Override
protected void onStop() {// Volley与Activity生命周期的联动
super.onStop();
MyApplication.getHttpQueues().cancelAll("abcPOST");//当Activity取消的时候,那么这个列队请求也会关闭
}
第五步: 我们来写git的JsonObjectRequest接收对象。
String url="http://www.baidu.com"; //与StringRequest基本上一样。但是StringRequest里面的4个参数,而JsonObjectRequest传递
// 的是五个参数。
//五个参数分别表示,第一个是请求的方式、第二个是请求的url、第三个是请求的数据(因为get会把谁有的数据都会传递过来,所以该
// 参数为空,post的话就不同了)、第四个是请求的成功的时候回调、第五个是请求失败的时候回调
JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject s) {
Toast.makeText(MainActivity.this,s.toString(),Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError s) {
Toast.makeText(MainActivity.this,s.toString(),Toast.LENGTH_LONG).show();
}
});
request.setTag("adcGet"); //设置标签
MyApplication.getHttpQueues().add(request); //添加到请求队列中。
第六步: 我们来写post的JsonObjectRequest接收对象。
String url="http://apis.juhe.cn/mobile/get?"; //网页的地址
HashMap<String,String> map=new HashMap<String,String>(); //HashMap用来存储数据。
map.put("phone","13429667914");
map.put("key","335adcc4e891ba4e4be6d7534fd54c5d");
JSONObject object = new JSONObject(map); //把数据放到JSONObject里面
//JsonObjectRequest里面五个参数,请求的方式、请求的地址、请求的数据、请求成功的回调、请求失败的回调。
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
Toast.makeText(MainActivity.this,jsonObject.toString(),Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(MainActivity.this,volleyError.toString()+"失败",Toast.LENGTH_LONG).show();
}
});
request.setTag("abcPOST");//为onStop()方法设置标签,以便好关闭。
MyApplication.getHttpQueues().add(request);//请求队列
以上的话就是原声的Volley对get、post的数据请求。下面是对成功和失败的二次分装。
未完待续。。。。。。。。。
热门评论
get吧。。。。写成git了。。