您的位置:首页 > 理论基础 > 计算机网络

Retrofit简单入门及使用

2017-05-07 16:30 225 查看
一、 简介

Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。

二、使用

1、 引入依赖

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
/*  如果Retrofit要和RxJava配套使用,还需要添加如下依赖  */
compile 'io.reactivex:rxjava:1.1.3'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'


2、 定义网络请求接口

public interface AppNetInterface {

@POST("GetInfo")
Call<ResponseBody> getResponse();

@FormUrlEncoded
@POST("UserInfo")
Call<User> getUserInfo(@Field("username") String username, @Field("password") String password);


@GET,@POST代表请求方式的不同,接口中每个方法 的参数必须加上注解,各个注解的含义请参见 Retrofit各个注解的含义及作用 ,方法的返回值都是Call<?>类型,如果你想要得到响应体,则返回值应为Call<Response>,也可以返回Call<javaBean>。

JavaBean是请求网络得到json或xml数据,Retrofit会通过你得到Retrofit实例时设置的解析器解析json或xml数据得到javaBean

3、得到网络请求接口的实例

// 我自己写的测试网址
String baseUrl = "http://192.168.2.108:8080/TestRetrofit/servlet/";
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
AppNetInterface appNetInterface = retrofit.create(AppNetInterface.class);


如果要在网络请求时都添加固定的请求头,那么可以给Retrofit添加拦截器,方法如下:

Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {

Request request = chain.request()
.newBuilder()
.addHeader("token", "valueToken")
.build();
return chain.proceed(request);
}
};

OkHttpClient cline = new OkHttpClient()
.newBuilder()
.addInterceptor(interceptor)
.build();

Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.2.108:8080/TestRetrofit/servlet/")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(cline)
.build();


4、发起网络请求

Call<ResponseBody> call = appNetInterface.getResponse();
call.execute().body; //同步请求,在当前线程发起网络请求
call.enqueue(new Callback<ResponseBody>() { //异步请求,开启新线程发起请求
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

}

@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {

}
});


三、配合Rxjava使用

1、 定义网络请求接口

@FormUrlEncoded
@POST("UserInfo")
Observable<User> getUser(@Field("username") String username, @Field("password") String password);


2、 得到网络请求接口实例

//同步请求,在当前线程发起请求
RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.create();
//异步请求,开启新线程发起请求
RxJavaCallAdapterFactory rxAdapter2 = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());

String baseUrl = "http://192.168.2.108:8080/TestRetrofit/servlet/";
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(rxAdapter2)
.build();
AppNetInterface appNetInterface = retrofit.create(AppNetInterface.class);


3、发起网络请求

appNetInterface.getUser(<
afb5
span class="hljs-string">"username", "password")
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage() );
}

@Override
public void onNext(User user) {
Log.e(TAG, "onNext: " + user.getUsername() );
tv_text.setText(user.getUsername());
}
});


结束语:这里只是介绍了Retrofit的简单使用过程,想要深入学习请参考这位大牛的博客Retrofit的使用与深入学习(上)Retrofit的使用与深入学习(下)。如果没有学习过Rxjava,请参考给 Android 开发者的 RxJava 详解,写的非常好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 网络 square