android技术博客

Volley详解

2017-12-14  本文已影响4人  五万年前走丢了

Volley的简介和特点:
特点:并发性,效率高,性能好。
Volley 的英文含义:并发,齐射
2013年开发大会上提出的网络请求工具。
网络请求的好处:
1.网络请求效率较高,而且写法简单,开发效率会得到很大提升。
2.可以处理get,post等网络请求同时可以高效率的加载网络图片。
3.可以不同的网络请求进行排序,根据优先级进行处理。
4.网络请求缓存处理。
5.多级别的取消请求。
6.和activity的生命周期进行联动。
为什么使用volley?
功能上:
get和post网络请求效率更高
图片加载有缓存功能。
其他:谷歌官方出版,权威之作。
volley请求的缺点
不支持文件的上传功能。
下面我们步入正题Volley的简单使用:
1.在全局变量中创建请求队列(公用)一定要在清单列表中注册
public class MyApp extends Application{
//1.创建请求队列,可以设置为全局变量
private static RequestQueue mQueue;
@Override
public void onCreate() {
super.onCreate();
//初始化请求队列
mQueue = Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getHttpQueue(){
return mQueue;
}
}

用GET的方式获取字符串
public class StringRequestActivity extends AppCompatActivity {
private TextView mTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_string_request);
mTv = (TextView) findViewById(R.id.tv);
volleyGet(Api.WelcomeUse);
}
/**
* listener : 当请求数据成功时,会回调的接口
* ErrorListener: 当请求失败时会回调的接口。
* */
public void volleyGet(String path){
//2.挑选合适的请求对象
StringRequest request = new StringRequest(Request.Method.GET, path, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
mTv.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mTv.setText("网络请求失败");
}
});
//给请求对象设置标记,为了取消请求用
request.setTag("volleyGet");
//3.添加请求对象到请求队列当中
MyApp.getHttpQueue().add(request);
}
@Override
protected void onStop() {
super.onStop();
//取消请求队列当中指定的请求对象
MyApp.getHttpQueue().cancelAll("volleyGet");
}
}
用POST的方式获取字符串
public class StringPostActivity extends AppCompatActivity {
private TextView mTv;
private String url = "http://www.moviebase.cn/uread/app/splash/splashList";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_string_request);
mTv = (TextView) findViewById(R.id.tv);
volleyPost(url);
}
public void volleyPost(String url){
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
mTv.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mTv.setText(volleyError.getMessage());
}
}){
//post请求必须要重写的方法 map当中包含写入到服务器的数据,key代表等号左边的内容
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String>map = new HashMap<>();
map.put("platform","2");
map.put("appVersion","1.7.0");
map.put("osType","2");
return map;
}
};
//注意:下面是add不是cancelAll(取消)
MyApp.getHttpQueue().add(request);
}
}
获取Json数据里的最外层的对象(最外层必须是对象),不能用Gson解析比较鸡肋.
public class JsonObjectActivity extends AppCompatActivity {
private TextView mTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_string_request);
mTv = (TextView) findViewById(R.id.tv);
volleyGet(Api.WelcomeUse);
}
public void volleyGet(String path) {
//使用了JsonObjectRequest或者JsonArrayRequest 必须用原生解析法
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, path, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
try {
String retCode = jsonObject.getString("retCode");
JSONObject object1 = jsonObject.getJSONObject("splash");
String imgurl = object1.getString("imgurl");
mTv.setText(imgurl);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mTv.setText(volleyError.getMessage());
}
});
//添加请求到请求队列
MyApp.getHttpQueue().add(request);
}
}
JsonArray获取Json数据里的最外层的数组(最外层必须是数组),不能用Gson解析比较鸡肋.
和上面的代码比较类似;
权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

上一篇下一篇

猜你喜欢

热点阅读