Volley框架:

特点:

  1. 通信更快,更简单
  2. Get,Post网络请求及网络图像的高效率异步处理请求。
  3. 当多个请求时,对网络请求进行排序,按优先级处理
  4. 当网络状况不好时,Volley可以自动对上次请求的数据进行缓存。
  5. 当有多个请求同时进行时,可以将这些请求同时取消。
  6. 和Activity生命周期联动,当Activity销毁时,可以同时取消网络请求操作。

缺点:
不适合数据的上传和下载,不适合大数据和流媒体的网络请求。

基本介绍:
1.Volley的get和post请求方式的使用:
StringRequest:对请求的数据返回结果类型不确定时使用
JsonObjectRequest:确定返回数据为JsonObject类型时使用
JsonArrayRequest:确定返回的数据是JsonArray时使用
2.回调的使用:
当我们请求成功,失败,请求重试等回调方法
3.Volley的网络请求队列的建立和取消队列请求:
在使用Volley时,首先要建立一个全局的请求队列。然后在建立请求,将请求加入请求队列中,这样整个app的请求是通过这个队列来管理的,方便取消某个请求或者取消所有请求的操作。
4.Volley和Activity生命周期的联动:
volley请求的生命周期与Activity的生命周期是关联在一起的。可以在Activity销毁时,同时关闭请求,防止在后台运行这个请求,造成内存溢出。
在volley请求的生命周期与Activity的生命周期关联的时候,设置Tag标签,因为请求的关闭需要通过Tag标签在请求队列中查找,然后再Activity的onStop()方法里执行取消请求。
5.Volley的简单的二次回调封装:
使用自定义的,方便进行全局的管理

Volley框架基本使用方法例子:

package com.example.volleytest1;import java.util.HashMap;
import java.util.Map;import org.json.JSONObject;import com.android.volley.RequestQueue;
import com.android.volley.Request.Method;
import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.Toast;/*** Volley是Android平台网络通信库:更快,更简单,更健壮* * @author Administrator* */
public class MainActivity extends Activity {private ImageView imageView;private NetworkImageView networkImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();getJSONVolley();loadImageVolley();NetWorkImageViewVolley();}private void initView() {imageView = (ImageView) findViewById(R.id.imageView);networkImageView = (NetworkImageView) findViewById(R.id.networkImageView);}// 使用Volley做Json字符串的请求public void getJSONVolley() {//建立请求队列RequestQueue requestQueue = Volley.newRequestQueue(this);String JSONDateUrl = "http://apis.juhe.cn/mobile/get?";//参数意义:请求方式、Url、请求成功的回调方法,请求失败的回调方法StringRequest jsonObjectRequest = new StringRequest(Method.POST,JSONDateUrl, new Response.Listener<String>() {@Overridepublic void onResponse(String arg0) {System.out.println(arg0);Toast.makeText(MainActivity.this, arg0, Toast.LENGTH_LONG).show();}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {System.out.println(arg0.toString());Toast.makeText(MainActivity.this, arg0.toString(), Toast.LENGTH_LONG).show();}}){@Overrideprotected Map<String, String> getParams()throws AuthFailureError {Map<String,String> map = new HashMap<String, String>();map.put("phone", "15211807740");map.put("key", "2d35800313209bff48674f203fb38b91");return map;}};//设置Tag标签jsonObjectRequest.setTag("aaa");//将请求加入到请求队列中requestQueue.add(jsonObjectRequest);}//使用Volley做图片的请求public void loadImageVolley() {String url = "http://g.hiphotos.baidu.com/image/pic/item/c2fdfc039245d688427eb40ca1c27d1ed21b241d.jpg";RequestQueue requestQueue = Volley.newRequestQueue(this);final LruCache<String, Bitmap> lurCache = new LruCache<String, Bitmap>(20);ImageCache imageCache = new ImageCache() {@Overridepublic void putBitmap(String key, Bitmap value) {lurCache.put(key, value);}@Overridepublic Bitmap getBitmap(String key) {return lurCache.get(key);}};ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);ImageListener listener = imageLoader.getImageListener(imageView,R.drawable.ic_launcher, R.drawable.ic_launcher);imageLoader.get(url, listener);}//使用NetWorkImageView完成图片加载//NetWorkImageView是Volley提供的一个控件,是用来替代ImageView的//NetWorkImageVIew控件的优点:当父类控件dispatch时,NetWorkImageView控件会自动取消网络请求,所以不用担心生命周期问题public void NetWorkImageViewVolley(){String imageUrl = "http://img2.3lian.com/2014/f7/5/d/22.jpg";RequestQueue requestQueue = Volley.newRequestQueue(this);final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20);ImageCache imageCache = new ImageCache() {@Overridepublic void putBitmap(String key, Bitmap value) {lruCache.put(key, value);}@Overridepublic Bitmap getBitmap(String key) {return lruCache.get(key);}};ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);networkImageView.setTag("networkimageview");networkImageView.setImageUrl(imageUrl, imageLoader);}}

运行结果:

对上边代码中 使用Volley做Json字符串的请求部分 的回调做二次回调封装:
SecondActivity类:

package com.test.volleytest2;import java.util.HashMap;
import java.util.Map;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import com.android.volley.VolleyError;
import com.example.volleytest1.R;public class SecondActivity extends Activity {private EditText editText;private Button button;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);initView();setOnListener();}private void setOnListener() {button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {textView.setText("");getJSONVolley();}});}private void initView() {editText = (EditText) findViewById(R.id.id_edittext);button = (Button) findViewById(R.id.id_button);textView = (TextView) findViewById(R.id.id_textview);}private void getJSONVolley() {String phone = editText.getText().toString();String key = "2d35800313209bff48674f203fb38b91";String url = "http://apis.juhe.cn/mobile/get?";Map<String,String> map = new HashMap<String, String>();map.put("phone", phone);map.put("key", key);RequestUtils.getVolley(SecondActivity.this, url, map,new MyListener() {@Overridepublic void success(String info) {System.out.println(info);textView.setText(info);}@Overridepublic void failure(VolleyError errorInfo) {System.out.println(errorInfo.toString());textView.setText(errorInfo.toString());}});}}

RequestUtils类:

package com.test.volleytest2;import java.util.Map;import android.content.Context;import com.android.volley.Request.Method;
import com.android.volley.AuthFailureError;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;public class RequestUtils {public static void getVolley(Context context,String url,final Map<String,String> map,MyListener listener){RequestQueue queues = Volley.newRequestQueue(context);StringRequest stringRequest = new StringRequest(Method.POST, url, listener.requestSuccess(), listener.requestFailure()){@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return map;}};stringRequest.setTag("abc");queues.add(stringRequest);queues.start();}}

MyListener类:

    package com.test.volleytest2;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.VolleyError;public abstract class MyListener{private Listener<String> listener;private ErrorListener errorListener;public abstract void success(String info);public abstract void failure(VolleyError errorInfo);public Listener<String> requestSuccess(){listener = new Listener<String>() {@Overridepublic void onResponse(String arg0) {success(arg0);}};return listener;}public ErrorListener requestFailure(){errorListener = new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {failure(arg0);}};return errorListener;}}

运行结果:

Async-http网络框架

高效的网络数据请求,文件的上传和下载
特点:

  1. 清晰地网络请求回调
  2. 请求使用ThreadPool,限制并发资源使用情况(防止内存溢出)
  3. Get/Post基于参数构建使用(RequestParams),方便
  4. Multipart文件上传,大数据上传下载
  5. 自动智能请求重试,优化了质量不一的移动连接
  6. 内置响应解析成JSON,使用JsonHttpResponseHandler
  7. 持久化cookie存储,保存cookie到你的应用程序的SharedPreferences
  8. 二进制文件(图片等)的下载,使用BinaryHttpResponseHandler

    使用Get/Post请求数据的基本操作:

package com.example.asncyhttptest;import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//      asynchttpGet();asynchttpPost();}// 使用Post方式请求private void asynchttpPost() {AsyncHttpClient client = new AsyncHttpClient();String url = "http://apis.juhe.cn/mobile/get?";RequestParams params = new RequestParams();params.put("phone", "15211807740");params.put("key", "2d35800313209bff48674f203fb38b91");client.post(url, params, new AsyncHttpResponseHandler() {@Override// 请求失败public void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println(arg0.toString());}@Override// 请求成功public void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println(arg0);}});}// 使用Get方式请求private void asynchttpGet() {AsyncHttpClient client = new AsyncHttpClient();String url = "http://apis.juhe.cn/mobile/get?phone=15211807740&key=2d35800313209bff48674f203fb38b91";client.get(url, new AsyncHttpResponseHandler() {@Override// 请求失败public void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println(arg0.toString());}@Override// 请求成功public void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println(arg0);}});}}

对上边例子中的Get/Post方法中的请求回调进行二次封装:
SecondActivity类:

package com.test.asncyhttptest;import com.example.asncyhttptest.R;
import com.loopj.android.http.RequestParams;import android.app.Activity;
import android.os.Bundle;public class SecondActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);asynchttpGet();asynchttpPost();}//使用Post方法请求private void asynchttpPost() {String postUrl = "http://apis.juhe.cn/mobile/get?";RequestParams params = new RequestParams();params.put("phone", "15211807740");params.put("key", "2d35800313209bff48674f203fb38b91");RequestUtils.ClientPost(postUrl, params, new NetCallBack() {@Overridepublic void RequestSuccess(String info) {System.out.println("POST:"+info);}@Overridepublic void RequestFailure(String info) {System.out.println("POST"+info);}});}//使用Get方式请求private void asynchttpGet() {String getUrl = "http://apis.juhe.cn/mobile/get?phone=15211807740&key=2d35800313209bff48674f203fb38b91";RequestUtils.ClientGet(getUrl, new NetCallBack() {@Overridepublic void RequestSuccess(String info) {System.out.println("GET:"+info);}@Overridepublic void RequestFailure(String info) {System.out.println("GET:"+info);}});}}

RequestUtils类:

package com.test.asncyhttptest;import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.RequestParams;public class RequestUtils {public static AsyncHttpClient client = new AsyncHttpClient();public static void ClientGet(String url,NetCallBack callback){client.get(url, callback);}public static void ClientPost(String url,RequestParams params,NetCallBack callback){client.post(url, params, callback);}}

NetCallBack类:

package com.test.asncyhttptest;import com.loopj.android.http.AsyncHttpResponseHandler;public abstract class NetCallBack extends AsyncHttpResponseHandler{public abstract void RequestSuccess(String info);public abstract void RequestFailure(String info);@Overridepublic void onStart() {super.onStart();System.out.println("请求开始");}@Overridepublic void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println("请求成功");RequestSuccess(arg0);}@Overridepublic void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println("请求失败");RequestFailure(arg0.toString());}}

运行结果:

Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)相关推荐

  1. 一个整合OkHttp 、Retrofit 、Volley 、RxJava、Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决

    一个整合OkHttp .Retrofit .Volley .RxJava.Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决 AndroidHttp 一个 ...

  2. Jest中Mock网络请求

    Jest中Mock网络请求 最近需要将一个比较老的库修改为TS并进行单元测试,修改为TS还能会一点,单元测试纯粹是现学现卖了,初学Jest框架,觉得在单元测试中比较麻烦的就是测试网络请求,所以记录一下 ...

  3. swift 同步 网络请求_IOS开发中异步网络请求上实现同步逻辑

    IOS开发中异步网络请求上实现同步逻辑 前提: 可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错. 之前ASI ...

  4. Android中的HTTP请求

    在Android 中发送HTTP请求的方式一般有两种,HttpURLConnection和HttpClient,下面介绍的是HttpURLConnection的使用方法. 1.定义xml文件 < ...

  5. Android中的网络编程-黄俊东-专题视频课程

    Android中的网络编程-1902人已学习 课程介绍         剔除繁杂的理论,注重实践,深入浅出讲解Android中的网络编程 课程收益     每一个学员都能系统地掌握Android中的网 ...

  6. android中怎么网络判断,Android中判断网络是否连接实例详解

    Android中判断网络是否连接实例详解 在android中,如何监测网络的状态呢,这个有的时候也是十分重要的,方法如下: public class ConnectionDetector { priv ...

  7. [react] react中发起网络请求应该在哪个生命周期中进行?为什么?

    [react] react中发起网络请求应该在哪个生命周期中进行?为什么? 异步情况可以在componentDidMount()函数中进行. 同步的情况可以在componentWillMount()中 ...

  8. iOS项目中的网络请求和上下拉刷新封装

    代码地址如下: http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此 ...

  9. Vue(五)Vue中的网络请求(使用Vue脚手架发送Axios请求)

    一.Axios         1.定义:利用ES6提供的Promise方式,把AJAX进行了封装.我们在Vue中发送网络请求,基本上就是使用Axios 需要安装第三方的Axios模块,才能使用    ...

最新文章

  1. 写python程序用什么软件最好-Python必学之编译器用哪个好?你用错了吧!
  2. 使用 GitHub, Jekyll 打造自己的免费独立博客
  3. snoopy(强大的PHP采集类) 详细介绍
  4. 内核态和用户态的区别
  5. This关键字的一些更新的理解
  6. 网站改造HTTPS有哪些好处?看很多网站都做了!
  7. Android:Smali语法中文介绍
  8. Ubuntu nginx 1.6.0 服务器 nginx.conf等相关配置
  9. Android Framework - 学习启动篇
  10. springboot整合mysql数据库_springBoot 集成Mysql数据库
  11. 在哪里可以查询汉语拼音音标?在线汉语拼音声调查询器
  12. 计算机毕业设计、课程设计之[含论文+源码等]S2SH+mysql的报刊订阅系统[包运行成功]
  13. 关于创建电子邮件链接时如何发送邮件内容
  14. 专家:闽新增11家A级物流企业多受益“信息快车”
  15. js 获取百度搜索关键词的代码
  16. 2020年华东理工大学计算机推免面试
  17. 父元素设置了圆角,子元素没有设置圆角,子元素的直角会遮挡住父元素的圆角
  18. 那些程序员们后知后觉的职涯经验
  19. 埇 mysql 不认这个字_输入法项目-用delphi生成GBK 中文编码 GBK 扩充汉字编码表(3) GBK/3: $8140 —$A0FE(部分)...
  20. 人工智能都有哪些应用场景?需要哪些训练数据?

热门文章

  1. Enhanced LSTM for Natural Language Inference-学习笔记
  2. Python(4):条件控制
  3. Java面试题40道
  4. LNSYOJ201小胖的奇偶【并查集+离散化】【做题报告】
  5. 畅享网助力打造IT界的文化人
  6. 机器学习基础:分类vs回归
  7. nagios报Connection refused by host的解决办法
  8. service worker之cache实践--sw-precache
  9. Crontab中shell每分钟执行一次HDFS文件上传不执行的解决方案
  10. CXF与Web项目集成---without Spring