Android各大网络恳求库的对比及实战-Android-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:257回复:0

 Android各大网络恳求库的对比及实战

楼主#
更多 发布于:2016-05-13 14:52


自个学习android也有一段时刻了,在实践开发中,频频的接触网络恳求,而网络恳求的办法许多,最多见的那么几个也就那么几个。本篇文章对多见的网络恳求库进行一个总结。
HttpUrlConnection
最开端学android的时分用的网络恳求是HttpUrlConnection,其时许多东西还不知道,可是在android 2.2及以下版别中HttpUrlConnection存在着一些bug,所以主张在android 2.3今后运用HttpUrlConnection,之前运用HttpClient。
在Android 2.2版别之前,HttpClient具有较少的bug,因而运用它是最佳的挑选。而在Android 2.3版别及今后,HttpURLConnection则是最佳的挑选。它的API简略,体积较小,因而十分适用于Android项目。紧缩和缓存机制能够有效地削减网络拜访的流量,在提升速度和省电方面也起到了较大的效果。关于新的应用程序应当愈加倾向于运用HttpURLConnection,因为在今后的作业当中咱们也会将更多的时刻放在优化HttpURLConnection上面。
特色
对比简便,灵敏,易于拓展
在3.0后以及4.0中都进行了改进,如对HTTPS的支撑
在4.0中,还增加了对缓存的支撑
用法
首要咱们需求获取到一个HttpURLConnection实例,通常需求new出一个URL方针,并传入方针网络地址,经过调用openConnection()办法取得HttpURLConnection实例。
得到该实例后。咱们需求设置一下http恳求的的办法,这儿咱们首要研讨get和post,默许是运用get办法。get通常用于从服务器获取数据,post通常用于向服务器提交数据,设置恳求办法运用函数setRequestMethod(“POST”)进行设置。
此外能够进行一些恳求的约束,比方衔接超时的时刻等,能够经过setConnectTimeout设置超时时刻。
获取服务器回来的输入流,运用getInputStream办法获取。
读取内容并处理
封闭衔接,经过调用disconnect办法封闭当时的衔接。
要害代码如下
运用过程中不要忘掉增加权限
GET
public String get(String urlPath) {
HttpURLConnection connection = null;
InputStream is = null;
try {
URL url = new URL(urlPath);
//取得URL方针
connection = (HttpURLConnection) url.openConnection();
//取得HttpURLConnection方针
connection.setRequestMethod("GET");
// 默许为GET
connection.setUseCaches(false);
//不运用缓存
connection.setConnectTimeout(10000);
//设置超时时刻
connection.setReadTimeout(10000);
//设置读取超时时刻
connection.setDoInput(true);
//设置是不是从httpUrlConnection读入,默许情况下是true;
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
//相应码是不是为200
is = connection.getInputStream();
//取得输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//包装字节省为字符流
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
connection = null;
}
if (is != null) {
try {
is.close();
is = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
POST
private String post(String urlPath, Mapparams) {
if (params == null || params.size() == 0) {
return get(urlPath);
}
OutputStream os = null;
InputStream is = null;
HttpURLConnection connection = null;
StringBuffer body = getParamString(params);
byte[] data = body.toString().getBytes();
try {
URL url = new URL(urlPath);
//取得URL方针
connection = (HttpURLConnection) url.openConnection();
//取得HttpURLConnection方针
connection.setRequestMethod("POST");
// 设置恳求办法为post
connection.setUseCaches(false);
//不运用缓存
connection.setConnectTimeout(10000);
//设置超时时刻
connection.setReadTimeout(10000);
//设置读取超时时刻
connection.setDoInput(true);
//设置是不是从httpUrlConnection读入,默许情况下是true;
connection.setDoOutput(true);
//设置为true后才干写入参数
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", String.valueOf(data.length));
os = connection.getOutputStream();
os.write(data);
//写入参数
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
//相应码是不是为200
is = connection.getInputStream();
//取得输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//包装字节省为字符流
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//封闭
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
connection = null;
}
}
return null;
}
private StringBuffer getParamString(Mapparams) {
StringBuffer result = new StringBuffer();
Iteratoriterator = params.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entryparam = iterator.next();
String key = param.getKey();
String value = param.getValue();
result.append(key).append('=').append(value);
if (iterator.hasNext()) {
result.append('&');
}
}
return result;
}
以上代码参阅了有些LessCode项目
HttpClient
特色
高效稳定,可是保护本钱昂扬,故android 开发团队不肯意在保护该库而是转投更为简便的HttpUrlConnection


用法
HttpClient是一个接口,因而无法直接创立它的实例,通常都是创立一个DefaultHttpClient实例
假如要主张Get恳求,需求创立一个HttpGet方针,并传入恳求地址
假如要主张Post恳求,需求创立一个HttpPost方针。并传入恳求地址,经过setEntity函数设置恳求参数
调用execute办法,传入HttpGet或许HttpPost实例,执行后回来HttpResponse方针,判断呼应状况码
解析呼应成果,经过调用getEntity函数取得一个HttpEntity方针,以后能够经过EntityUtils.toString办法将其变换为字符串
因为在android2.3以后就被HttpUrlConnection替代了,这儿也不过多介绍了,不过最初学习它的时分还没接触到别的库,就感受它好便利,下面简略贴出运用办法
GET
private String get(String url){
HttpClient client=null;
HttpGet request=null;
try {
client=new DefaultHttpClient();
request=new HttpGet(url);
HttpResponse response=client.execute(request);
if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
String result=EntityUtils.toString(response.getEntity(),"UTF-8");
return result;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
POST
private String post(String url,Listparams){
HttpClient client=null;
HttpPost request=null;
try {
client=new DefaultHttpClient();
request=new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse response=client.execute(request);
if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
String result=EntityUtils.toString(response.getEntity(),"UTF-8");
return result;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
以上代码参阅了郭霖《榜首行代码》——HttpClient有些
Android Asynchronous Http Client
Android Asynchronous Http Client一看名字就知道它是根据Http Client的,可是呢在安卓中Http Client现已废弃了,所以也不主张运用这个库了。然后仍然有一些可取的内容值得学习,所以这儿也介绍一下。
特色
所以恳求在子线程中完结,恳求回调在调用该恳求的线程中完结
运用线程池
运用RequestParams类封装恳求参数
支撑文件上载
耐久化cookie到SharedPreferences,个人感受这一点也是这个库的主要特色,能够很便利的完结一些模拟登录
支撑json
支撑HTTP Basic Auth
用法
编写一个静态的HttpClient
package cn.edu.zafu.http;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class TestClient {
private static final String BASE_URL = "http://121.41.119.107/";
private static AsyncHttpClient client = new AsyncHttpClient();
public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.get(getAbsoluteUrl(url), params, responseHandler);
}
public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.post(getAbsoluteUrl(url), params, responseHandler);
}
private static String getAbsoluteUrl(String relativeUrl) {
return BASE_URL + relativeUrl;
}
}
调用get或许post办法
参数经过RequestParams传递,没有参数则传递null
RequestParams params = new RequestParams();
params.put("","");
假如要保留cookie,在主张恳求之前调用以下代码
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
以后恳求所得到的cookie都会主动耐久化
假如要自个增加cookie,则调用以下代码
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);
运用
在回调函数中处理回来成果
private void get(){
TestClient.get("test/index.php", null, new AsyncHttpResponseHandler() {
 public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
}
 public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
private void post(){
RequestParams params = new RequestParams();
params.put("user","asas");
params.put("pass","12121");
params.put("time","1212121");
TestClient.post("test/login.php", params, new AsyncHttpResponseHandler() {
 public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
}
 public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
以上代码参阅了Android Asynchronous Http Client官方实例
Volley
既然在android2.2以后不主张运用Http Client,那么有没有一个库是android2.2及以下版别运用Http Client,而android2.3及以上版别运用HttpUrlConnection的呢,答案是必定的,即是Volley,它是android开发团队在2013年Google I/O大会上推出了一个新的网络通讯结构
Volley能够说是把AsyncHttpClient和Universal-Image-Loader的长处集于了一身,既能够像AsyncHttpClient相同十分简略地进行HTTP通讯,也能够像Universal-Image-Loader相同轻松加载网络上的图画。除了简略易用以外,Volley在功用方面也进行了大幅度的调整,它的规划方针即是十分合适去进行数据量不大,但通讯频频的网络操作,而关于大数据量的网络操作,比方说下载文件等,Volley的体现就会十分差劲
特色
Volley的优势在于处理小文件的http恳求;
在Volley中也是能够运用Okhttp作为传输层
Volley在处理高分辨率的图画紧缩上有极好的支撑;
NetworkImageView在GC的运用模式上愈加保存,在恳求清理上也愈加积极,networkimageview只是依赖于强壮的内存引用,并当一个新恳求是来自ImageView或ImageView脱离屏幕时 会清理掉一切的恳求数据。
用法
创立一个RequestQueue方针。
创立一个Request方针。
将Request方针增加到RequestQueue里边。
下面一步一步来学习其用法
GET
private void get(){
RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
String url="http://121.41.119.107/test/index.php";
StringRequest request=new StringRequest(url, new Response.Listener() {
 public void onResponse(String response) {
Log.d("TAG",response);
}
}, new Response.ErrorListener() {
 public void onErrorResponse(VolleyError error) {
}
});
queue.add(request);
}
POST
经过指定恳求办法为Request.Method.POST使其变成post恳求,然后从头getParams办法设置恳求参数。当宣布POST恳求的时分,Volley会测验调用StringRequest的父类——Request中的getParams()办法来获取POST参数
private void post() {
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "http://121.41.119.107/test/login.php";
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener() {
 public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
 public void onErrorResponse(VolleyError error) {
}
}) {
//重写getParams办法设置参数
 protected MapgetParams() throws AuthFailureError {
Mapparams = new HashMap();
params.put("user", "asas");
params.put("pass", "12121");
params.put("time", "1212121");
return params;
}
};
queue.add(request);
}
加载图画
加载图画的办法和前面相似,只不过不在是StringRequest而是ImageRequest。
private void getImage() {
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "https://www.baidu.com/img/bdlogo.png";
//第三第四个参数别离用于指定答应图画最大的宽度和高度,假如指定的网络图画的宽度或高度大于这儿的最大值,则会对图画进行紧缩,指定成0的话就表明不论图画有多大,都不会进行紧缩。
//第五个参数即是ImageView里中的特色ScaleType
//第六个参数用于指定图画的色彩特色
ImageRequest request = new ImageRequest(url, new Response.Listener() {
[email protected]
public void onResponse(Bitmap response) {
ImageView iv= (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(response);
}
}, 0, 0, ImageView.ScaleType.CENTER, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
 public void onErrorResponse(VolleyError error) {
}
});
queue.add(request);
}
本来加载图画的功用还远远不止这些,运用ImageLoader能够完结对图画的缓存,还能够过滤重复衔接,防止发送重复的恳求
ImageLoader的运用办法归纳为以下几步
1. 创立一个RequestQueue方针。
2. 创立一个ImageLoader方针。
3. 获取一个ImageListener方针。
4. 调用ImageLoader的get()办法加载网络上的图画。
//承继ImageCache,运用LruCache完结缓存
public class BitmapCache implements ImageLoader.ImageCache {
private LruCachemCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache(maxSize) {
 protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
 public Bitmap getBitmap(String url) {
return mCache.get(url);
}
 public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
private void getImageByImageLoader() {
ImageView iv= (ImageView) findViewById(R.id.iv);
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "https://www.baidu.com/img/bdlogo.png";
ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
// 榜首个参数指定用于显现图画的ImageView控件
// 第二个参数指定加载图画的过程中显现的图画
// 第三个参数指定加载图画失利的情况下显现的图画
ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
// 调用ImageLoader的get()办法来加载图画
// 榜首个参数即是图画的URL地址
// 第二个参数则是刚刚获取到的ImageListener方针
// 假如想对图画的巨细进行约束,也能够运用get()办法的重载,指定图画答应的最大宽度和高度,即经过第三第四个参数指定
loader.get(url,listener);
}
终究,Volley供给了一种自定义ImageView来加载图画,其运用办法可归纳为
1. 创立一个RequestQueue方针。
2. 创立一个ImageLoader方针。
3. 在规划文件中增加一个NetworkImageView控件。
4. 在代码中获取该控件的实例。
5. 设置要加载的图画地址。
咱们在规划中声明该控件
android:id="@+id/network_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
在程序中完结加载
public void networkImageView(){
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
NetworkImageView niv= (NetworkImageView) findViewById(R.id.network_image_view);
niv.setDefaultImageResId(R.mipmap.ic_launcher);//设置加载中显现的图画
niv.setErrorImageResId(R.mipmap.ic_launcher);//设置加载失利时显现的图画
niv.setImageUrl("https://www.baidu.com/img/bdlogo.png", loader);//设置方针图画的URL地址
}
自定义Request
在实践应用中,通常需求将http恳求与json进行集成,而Volley正恰恰支撑这么的办法,不过需求咱们自个自定义Request,这儿咱们运用谷歌的Gson库进行集成。
1. 承继Request类
2. 重写parseNetworkResponse,完结json与实体类变换,因为实体类不决,所以选用泛型
下文用到的json字符串如下
{"name":"lizhangqu","age":16}
1
package cn.edu.zafu.http;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.谷歌.gson.Gson;
import java.io.UnsupportedEncodingException;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class GsonRequestextends Request{
private final Response.ListenermListener;
private Gson mGson;
private ClassmClass;
public GsonRequest(int method, String url, Classclazz, Response.Listenerlistener,
Response.ErrorListener errorListener) {
super(method, url, errorListener);
mGson = new Gson();
mClass = clazz;
mListener = listener;
}
public GsonRequest(String url, Classclazz, Response.Listenerlistener,
Response.ErrorListener errorListener) {
this(Method.GET, url, clazz, listener, errorListener);
}
 protected ResponseparseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(mGson.fromJson(jsonString, mClass),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
 protected void deliverResponse(T response) {
mListener.onResponse(response);
}
}
编写测验实体类,两个字段一个name一个age
package cn.edu.zafu.http;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
 public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
调用办法和StringRequest是相同的。如下所示
private void json(){
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "http://121.41.119.107/test/index.php";
GsonRequestrequest=new GsonRequest(url, Person.class, new Response.Listener() {
 public void onResponse(Person response) {
Log.d("TAG",response.toString());
}
}, new Response.ErrorListener() {
 public void onErrorResponse(VolleyError error) {
}
});
queue.add(request);
}
以上代码参阅了郭霖三篇Volley博客文章,别离为
Android Volley彻底解析(一),初识Volley的根本用法
Android Volley彻底解析(二),运用Volley加载网络图画
Android Volley彻底解析(三),定制自个的Request
okHttp
okhttp 是一个 Java 的 HTTP+SPDY 客户端开发包,一起也支撑 Android。需求Android 2.3以上。
特色
OKHttp是Android版Http客户端。十分高效,支撑SPDY、衔接池、GZIP和 HTTP 缓存。
默许情况下,OKHttp会主动处理多见的网络疑问,像二次衔接、SSL的握手疑问。
假如你的应用程序中集成了OKHttp,Retrofit默许会运用OKHttp处理别的网络层恳求。
从Android4.4开端HttpURLConnection的底层完结选用的是okHttp.
用法
新建一个OkHttpClient方针
经过Request.Builder方针新建一个Request方针
回来执行成果
GET
private String get(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = null;
try {
response = client.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
POST
POST需求运用RequestBody方针,以后再构建Request方针时调用post函数将其传入即可
private String post(String url) {
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormEncodingBuilder()
.add("user", "Jurassic Park")
.add("pass", "asasa")
.add("time", "12132")
.build();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
Response response = null;
try {
response = client.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
此外,post的运用办法还支撑文件等操作,具体运用办法有爱好的能够自行查阅
对Gson的支撑
okHttp还自带了对Gson的支撑
private Person gson(String url){
OkHttpClient client = new OkHttpClient();
Gson gson = new Gson();
Request request = new Request.Builder()
.url(url)
.build();
Response response = null;
try {
response = client.newCall(request).execute();
Person person = gson.fromJson(response.body().charStream(), Person.class);
return person;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
异步操作
以上的两个比如必须在子线程中完结,一起okHttp还供给了异步的办法调用,经过运用回调来进行异步调用,然后okHttp的回调仍然不在主线程中,因而该回调中不能操作UI
private void getAsync(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = null;
client.newCall(request).enqueue(new Callback() {
 public void onFailure(Request request, IOException e) {
}
 public void onResponse(Response response) throws IOException {
String result = response.body().string();
Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
//不能操作ui,回调仍然在子线程
Log.d("TAG", result);
}
});
}
okHttp的运用还有许多内容,这儿也不过多介绍,更多内容,参阅官方网址
Retrofit
特色
功用最佳,处理最快
运用REST API时十分便利;
传输层默许就运用OkHttp;
支撑NIO;
具有超卓的API文档和社区支撑
速度上比volley更快;
假如你的应用程序中集成了OKHttp,Retrofit默许会运用OKHttp处理别的网络层恳求。
默许运用Gson
运用
Retrofit支撑同步和异步两种办法,在运用时,需求将恳求地址变换为接口,经过注解来指定恳求办法,恳求参数,恳求头,回来值等信息。仍是运用之前的person的那段json值,get恳求到服务器后从数据库查询数据,回来值为查询到的数据,post恳求向服务器提交一条数据,回来值为提交的数据。
首要完结恳求所用的service,是一个interface,彻底经过注解完结装备
package cn.edu.zafu.http;
import retrofit.Callback;
import retrofit.http.Field;
import retrofit.http.FormUrlEncoded;
import retrofit.http.GET;
import retrofit.http.Headers;
import retrofit.http.POST;
import retrofit.http.Path;
import retrofit.http.Query;
/**
* Created by lizhangqu on 2015/5/11.
*/
public interface PersonService {
[email protected]({
"Cache-Control: max-age=640000",
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
})
//经过注解设置恳求头
("/{test}/rest.php")
//设置恳求办法为get,相对路径为注解内内容,
Person getPerson(@Path("test") String dir,@Query("name") String name);


//urlencode
("/test/rest1.php")
//post提交
Person updatePerson(@Field("name") String name,@Field("age") int age);
("/test/rest1.php")
void updatePerson(@Field("name") String name,@Field("age") int age, Callbackcallback);
//异步回调,不能指定回来值
}
GET
运用时,经过RestAdapter的实例取得一个接口的实例,其本质是动态署理,留意富含回来值的办法是同步的,不能UI线程中调用,应当在子线程中完结
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://121.41.119.107")
.build();
PersonService personService=restAdapter.create(PersonService.class);
Person person=personService.getPerson("test","zhangsan");
Log.d("TAG",person.toString());
POST
POST的调用同Get,取得adapter后取得一个署理方针,然后经过这个署理方针进行网络恳求
Person person1=personService.updatePerson("lizhangqu", 12);
Log.d("TAG",person1.toString());
异步恳求
假如要运用异步恳求,需求将接口中的办法回来值修正会void,再参加回调参数Callback,就如PersonService中第三个办法相同,恳求完结后会回调该callback方针的success或许fail办法。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://121.41.119.107")
.build();
PersonService personService=restAdapter.create(PersonService.class);
personService.updatePerson("lizhangqu",23, new Callback() {
 public void success(Person person, Response response) {
Log.d("TAG", person.toString());
}
 public void failure(RetrofitError error) {
}
});
Retrofit的运用还有许多内容,剩余的就留给各位读者自行去发现了,而其官网页供给了及其具体的阐明。下面供给官方网址
retrofit官网示例
这个库里边有许多精华的内容,主张各位细心的阅览下官方的文档。
RoboSpice
见之前写的一篇博文
RoboSpice:android异步网络库简略用法
总结
网络恳求库多种多样,终究其本质思维是一致的,要学会融汇贯通,仍是要fucking the source code。因为本篇文章现已过长,所以图画的网络加载预备另开一篇博客进行收拾。




优质IT资源分享社区为你提供此文。
本站有大量优质android教程视频,资料等资源,包含android基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

android教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客