Rejava + retrofit + okhttp 简单操作

1人阅读 评论(0) 收藏 举报

第一步,添加依赖

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
compile 'io.reactivex.rxjava2:rxjava:2.1.1'

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//配合Rxjava 使用

第二步,构建 okhttp

public class MyUtils {


    public static OkHttpClient getOkHttpClient(Activity activity) {


        //初始化OkHttpClient
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)    //连接   超时时间
                .readTimeout(10, TimeUnit.SECONDS)      //读操作 超时时间
                .writeTimeout(10, TimeUnit.SECONDS)     //写操作 超时时间
.cookieJar(new CookiesManager(this))
.build();
return client; }}

第三步,创建接口


public interface AppURL {


    String url_1 = "top250";

    @GET(url_1)
    Observable<MovieSubject> getMovieObservable(@Query("start") int start, @Query("count") int count);

}




第四步,构建retrofit并请求网络

private void initAll() {

        String movie_url = "https://api.douban.com/v2/movie/";

        OkHttpClient okHttpClient = MyUtils.getOkHttpClient(this);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(movie_url)
                .addConverterFactory(GsonConverterFactory.create(getGson()))
                //要使用retroiftrexjava配合使用这个方法必须有,不然会报Unable to create call adapter
                // for rx.Observable<com.ethanco.retrofit2_0test.HomeTopBean>异常
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)//整合okhttp
                .build();

        final AppURL appURL = retrofit.create(AppURL.class);


        //////////////////////////////////////////////////

        Observable<MovieSubject> movieObservable = appURL.getMovieObservable(0, 20);
        movieObservable.subscribeOn(Schedulers.io())//使请求网络的操作运行在子线程
                .observeOn(AndroidSchedulers.mainThread())//使后面的subscribe运行在主线程
                .subscribe(new Observer<MovieSubject>() {

                    private Disposable mDisposable;

                    @Override
                    public void onSubscribe(Disposable d) {//订阅
                        mDisposable = d;
                    }

                    @Override
                    public void onNext(MovieSubject bean) {
                        List<MovieSubject.SubjectsBean> subjects = bean.getSubjects();
                        if (subjects != null) {
                            for (int i = 0; i < subjects.size(); i++) {
                                Log.d(TAG, "----->onNext " + subjects.get(i).getTitle());
                            }
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {
                        mDisposable.dispose(); //截断操作
                    }
                });

    }


避免gson解析json时出现空指针:

private Gson getGson() {

    GsonBuilder gb = new GsonBuilder();
    gb.registerTypeAdapter(String.class, new StringConverter());

    if (gson == null) {
        gson = gb.create();
    }
    return gson;
}
/**
 * 避免gson解析json时出现空指针
 */
public class StringConverter implements JsonSerializer<String>, JsonDeserializer<String> {

    public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) {
        if (src == null) {
            return new JsonPrimitive("");
        } else {
            return new JsonPrimitive(src.toString());
        }
    }

    public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {
        return json.getAsJsonPrimitive().getAsString();
    }
}

/**
 * 自动管理Cookies
 */
public class CookiesManager implements CookieJar {

    private String TAG = "==CookiesManager";
    private Context mContext;
    private PersistentCookieStore cookieStore;


    public CookiesManager(Context context) {
        this.mContext = context;
        cookieStore = new PersistentCookieStore(mContext);
    }


    @Override
    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
        if (cookies != null && cookies.size() > 0) {
            for (Cookie item : cookies) {
                cookieStore.add(url, item);
                Log.d(TAG, "saveFromResponse -----> url.host() = " + url.host() + " domain = " + item.domain());
            }
        }
    }

    @Override
    public List<Cookie> loadForRequest(HttpUrl url) {
        List<Cookie> cookies = cookieStore.get(url);
        Log.d(TAG, "loadForRequest -----> url.host() = " + url.host());
        if (cookies != null) {
            for (int i = 0; i < cookies.size(); i++) {
                String domain = cookies.get(i).domain();
                Log.d(TAG, "-----> loadForRequest  domain = " + domain);
            }
        }
        return cookies;
    }
}


查看评论

RxJava,Retrofit,OkHttp3结合使用

首先 亮出 gradle apply plugin: 'com.android.application' android { compileSdkVersion 23 buildT...
  • sky_pjf
  • sky_pjf
  • 2016-05-13 15:20:59
  • 4812

retrofit2.0+okhttp3+rxjava的封装(简单好用)

关于retrofit2.0的简单使用,请看我的另一篇博客:Retrofit2使用(非常简洁易懂) - 秦时明月 - 博客频道 - CSDN.NET http://blog.csdn.net/baid...
  • baidu_31093133
  • baidu_31093133
  • 2016-08-22 16:49:46
  • 6379

一篇文章带你走通 OkHttp+Retrofit+Rxjava

一篇文章带你走通 OkHttp+Retrofit+Rxjava@(Android)[android]一篇文章带你走通 OkHttpRetrofitRxjava 参考网站 OkHttp部分 OkHttp...
  • u013647382
  • u013647382
  • 2017-02-18 22:12:14
  • 6761

1、Retrofit+Okhttp的基本使用

1、导入必要jar包 compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta4’//Retrofit2所需要的包 compile ‘com...
  • woshiwoshiyu
  • woshiwoshiyu
  • 2016-12-01 01:49:33
  • 833

Android网络框架之Retrofit + RxJava + OkHttp

现在android网络请求大部分已经换成了Retrofit2.0 +RxJava + okHttp3.0,Retrofit 使用接口的方式,负责请求的数据和请求的结果,OkHttp 负责请求的过程,R...
  • f917386389
  • f917386389
  • 2017-07-31 18:05:05
  • 1585

Retrofit + RxJava + OkHttp 让网络请求变的简单-封装篇

前面一篇文章讲了一下Retrofit+ RxJava 请求网络的一些基本用法,还没有看过的可以去看一下Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇,正如标题所说的,...
  • yangxi_001
  • yangxi_001
  • 2017-05-17 18:58:32
  • 431

RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)

Rxjava+ReTrofit+okHttp背景:    学习Rxjava+Retrofit+okhttp已经一段时间了,发现确实很强大,但是使用起来稍微有点麻烦,在工作中重复的代码太多,所以决定对h...
  • u014610664
  • u014610664
  • 2016-07-18 11:47:15
  • 180559

RxJava+Retrofit+OkHttp3+Dagger2+MVP构建Android项目简单例子

RxJava+Retrofit+OkHttp3+Dagger2+MVP,最新刚接触这个框架,然后从别人那学来的用上了,写成了一个简单的demo,准备自己的下一个项目用这框架开发...
  • wb_001
  • wb_001
  • 2017-08-08 17:56:41
  • 1663

Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇

最近因为手头上的工作做完了,比较闲,想着做一些优化。看到以前用的那一套网络框架添加一个请求比较麻烦,并且比较难用,所以想改造一下网络框架。现在Android 市面上很火的当然是 Retrofit+Rx...
  • yangxi_001
  • yangxi_001
  • 2017-05-17 18:57:42
  • 1839

Retrofit与OkHttp进行HTTP网络编程使用指南

Retrofit与okhttp共同出自于Square公司.OkHttp我就不用多说了,相信大家已经非常熟悉了,不太了解的可以看下这里OkHttp,也可以看下hongyang大牛的OkHttpUtils...
  • u013653230
  • u013653230
  • 2016-09-12 23:50:44
  • 1228
    个人资料
    等级:
    访问量: 3
    积分: 30
    排名: 200万+
    文章分类
    文章存档