Retrofit的简单使用方法

来源:互联网 发布:php global用法 编辑:程序博客网 时间:2024/06/06 17:54

Retrofit是一个类型安全的网络请求库,它和OKHttp共同出自于square公司。Retrofit是对OKHttp做了一层封装,把网络请求都交给了OKHttp,简化了网络请求流程,使我们只需要通过简单的配置就能使用retrofit来进行网络请求了。下面就来看下 Retrofit 的简单使用方法:

(一) 引入库

在gralde文件中引入后续要用到的库

     /**Retrofit引入库*/    compile 'com.squareup.retrofit2:retrofit:2.0.0'    compile 'com.squareup.retrofit2:converter-gson:2.0.0'    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'    /**O_K_HTTP引入库*/    compile 'com.squareup.okio:okio:1.5.0'    compile 'com.squareup.okhttp3:okhttp:3.2.0'

(二) 初始化Retrofit

创建Retrofit,并设置BaseURL和Json转换,ServiceGenerator工具类:

/** * 封装的Retrofit工具类 */public class ServiceGenerator {    /**初始化OkHttpClient*/    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder()                                                        .connectTimeout(5, TimeUnit.SECONDS);//设置超时时间    /**初始化Retrofit*/    private static Retrofit.Builder builder = new Retrofit.Builder()                                                    .baseUrl("http://zthdwl.com/wap.php/")//baseURL                                                    .addConverterFactory(FastJsonConverterFactory.create())                                                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create());    public static <S> S createService(Class<S> serviceClass) {        Retrofit retrofit = builder.client(httpClient.build())                                    .build();        return retrofit.create(serviceClass);    }}

(三) 定义接口

RequestUrl接口类:

public interface RequestUrl { @FormUrlEncoded @POST("Public/loginAction") Call<User> LoginVery(@Field("phone") String phone, @Field("password") String password, @Field("type") String type);}

(四) 网络请求使用

创建请求服务,并为网络请求方法设置参数:

RequestUrl service = ServiceGenerator.createService(RequestUrl.class);

发送请求,通过调用Retrofit2的execute(同步)或者enqueue(异步)方法,发送请求到网络服务器,并返回一个响应(Response):

Call<User> loginCall = service.LoginVery(CodeUtils.encodeToString(account),                                           CodeUtils.encodeToString(password),                                           CodeUtils.encodeToString(type));loginCall.enqueue(new Callback<User>() {            @Override            public void onResponse(Call<User> call, Response<User> response) {                if (response.isSuccessful())                {                    /**请求成功*/                    User user= new User();                    user = response.body();                    System.out.print(user);                }            }            @Override            public void onFailure(Call<User> call, Throwable t) {                /**请求失败*/                Log.e("Login Throwable",t.getMessage());            }        });

Retrofit 与 RxJava结合使用

Retrofit本身对Rxjava提供了支持。下面来看下两者结合该怎么使用:

(一) 首先要添加Retrofit对RxJava的支持,在build.gradle中添加:

compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'

(二) 在定义Retrofit时,使用RxJava作为毁掉适配器:

Retrofit retrofit = new Retrofit.Builder()        .baseUrl(baseUrl)        .addConverterFactory(GsonConverterFactory.create())        //添加RxJava作为回调适配器        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())        .build();

(三) 定义接口

使用Retrofit与RxJava结合,那么定义的RequestUrl 返回值就不在是一个Call了,而是一个Observable,代码如下:

public interface RequestUrl {    @FormUrlEncoded    @POST("Public/loginAction")    Observable<String> LoginVery1(@Field("phone") String phone, @Field("password") String password, @Field("type") String type);//    @FormUrlEncoded//    @POST("Public/loginAction")//    Call<User> LoginVery(@Field("phone") String phone, @Field("password") String password, @Field("type") String type);}

(四) 网络请求使用

创建请求服务,并为网络请求方法设置参数和之前的方法相同:

RequestUrl service = ServiceGenerator.createService(RequestUrl.class);

发送请求则是通过RxJava的观察者模式和订阅方法来实现:

Observable<User> stringObservable = service.LoginVery2(CodeUtils.encodeToString(account),                CodeUtils.encodeToString(password),                CodeUtils.encodeToString(type));stringObservable.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Action1<User>() {                    @Override                    public void call(User s) {                        Log.e("loginResponse1", s.toString());                        User loginResponse = s;                        if (loginResponse.errcode.equals("00001")) {                            mLoginResponseOnListener.onSuccess(loginResponse);                        } else {                            mLoginResponseOnListener.onFailure(loginResponse.errinfo);                        }                    }                });

这样基本上就完成了Retrofit和Rxjava的简单结合。

Android开发路上一只小菜鸟的拙见,如有错误欢迎批评指出,定及时纠正,谢谢!

1 0
原创粉丝点击