美文网首页
android--------Retrofit+RxJava的使

android--------Retrofit+RxJava的使

作者: 切切歆语 | 来源:发表于2019-11-05 21:54 被阅读0次

Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库。

http://square.github.io/retrofit/
https://github.com/square/retrofit

使用需引入:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

Retrofit包含了多种网络请求方式,可根据参考选择。
全路径

@GET(URL+"?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
Call<解析实体类> getInfo1();  

@Query("key") String key用于接口键值对类型参数

 @GET("app.php")
 Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip);

@QueryMap 如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递

@GET("app.php")
Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);

注意:以上GET换成POST也是一样的效果

@Field("key") String key用于接口键值对类型参数

@FormUrlEncoded
@POST("app.php")
Call<UserInfo> postField(@Field("platform") String bookId, @Field("appkey") String title,@Field("c") String content);

@FieldMap 如果Field参数比较多,那么可以通过@FieldMap方式将所有的参数集成在一个Map统一传递

@FormUrlEncoded
@POST("app.php")
Call<UserInfo> postInfoMap(@FieldMap Map<String,String> map);

对于 Retrofit 中新的URL定义方式也是有一定要求的,版本不同有时格式也不一样,现在大多数2.0以上,@GET/POST()建议格式不要以 /开头,如:

@POST("/app.php")

而是:URL以 / 结尾 如:(注:全路径则不影响)

 http://www.baidu.com/

代码:

定义接口 IRequestService .java

@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")  
Call<UserInfo> getInfo1();  
  
/*@Query("apikey") String apikey 用于接口键值对类型参数*/  
@GET("app.php")  
Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip, @Query("a") String tag);  
  
/*@QueryMap  如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递*/  
@GET("app.php")  
Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);  

使用

Retrofit retrofit = new Retrofit.Builder() .baseUrl(urls) .addConverterFactory(GsonConverterFactory.create()) .build();
IRequestService service = retrofit.create(IRequestService.class);
Call<DepartmentInfo> call=service.getInfo1();
call.enqueue(new Callback<DepartmentInfo>() { @Override
    public void onResponse(Call<DepartmentInfo> call, Response<DepartmentInfo> response) { DepartmentInfo info=response.body();
        mTextView.setText(info.getError()+"-----"+info.getData().get(0).toString());
        Toast.makeText(getApplicationContext(),info.getError(),Toast.LENGTH_LONG).show();
        Log.i("tag", info.getData().get(0).getDepartname());
        Log.i("tag", info.getData().get(1).getDepartname());
    } @Override
    public void onFailure(Call<DepartmentInfo> call, Throwable t) { } });

Retrofit + RxJava结合使用
和上面差不多, 只不过不再是Call对象而是Observable对象,及RxJava中的事件源。

@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")
Observable<UserInfo> getRxjava();

@POST("app.php")
Observable<UserInfo> getUserFollowingObservable(@QueryMap Map<String,String> map);

使用

RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
Retrofit retrofit11 = new Retrofit.Builder() 
  .baseUrl(urls) 
  .addConverterFactory(GsonConverterFactory.create())
  .addCallAdapterFactory(rxAdapter) 
  .build();
IRxJavaService apiService = retrofit11.create(IRxJavaService.class);
Observable<DepartmentInfo> call = apiService.getUser(Util.showMap());
subscription = call
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<DepartmentInfo>() { 
            @Override
            public void onCompleted() { }
            @Override
            public void onError(Throwable e) { } 
            @Override
            public void onNext(DepartmentInfo user) { Toast.makeText(getApplicationContext(),
                        user.getData().get(0).getDepartname(),
                        Toast.LENGTH_SHORT) .show();
            } });

总结:

Retrofit的使用和理解简单的梳理了一遍,希望能够帮助大家更好地理解Retrofit的使用。

源码点击下载:https://github.com/DickyQie/android-api-request

相关文章

  • android--------Retrofit+RxJava的使

    Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库。 http:/...

  • 借你耳朵使使

    最近,偶然发现有音频类的APP很火,便也下载了一个。这个还真不错:小说、相声、童话故事、古诗词解读……几乎囊括了所...

  • 使的慌

    邻家嫂子从车前头绕到这边时看见招娣儿扶着车门儿站到地上了,忙走几步过来,扶住招娣儿说,“下来了娣儿,我还说过来扶着...

  • 使我们脆弱的,也使我们美丽

    一年之中,总有那么一两段时间,觉得自己很没用,好像什么事情都做不好,或者遇到一些事情,总是难以用完美的姿态去面对。...

  • 君子使物,不为物使

    “君子使物,不为物使”是我曾读《菜根谭》中所看到的一句话,当时这句话引起了我的主意,我想起曾经自己深受手机的控制而...

  • 谁借我点脑子使使

    一直以来,我都坚信自己的脑容量太小,脑子从来没够用过,正如天气预报从来没准过一样。 有热心的不服气的网友(俗称轴脾...

  • 君子使物,不为物使

    我愿意深深地扎入生活,吮尽生活的骨髓,过得扎实,简单,把一切不属于生活的内容剔除得干净利落,把生活逼到绝处,用最基...

  • 君子使物,不为物使

    《世说新语》中记载了两则发人深省的小故事: 一则是“阮裕焚车”的故事——阮裕曾有一辆非常好的车子,无论谁来借,他都...

  • 使人快乐使己快乐

    “哎,你发现没有,给别人带来快乐的同时,自己也会获得同样的快乐,甚至是加倍的快乐。” “是吗?” “这还用怀疑吗?...

  • 学习使我充实,使我的内心平静

    下午从教室回到宿舍后,心情一直很低沉,就一瞬间,好像失去了对生活所有的希望和兴趣。我感觉我没有心,我的心毫无感觉...

网友评论

      本文标题:android--------Retrofit+RxJava的使

      本文链接:https://www.haomeiwen.com/subject/tvkdbctx.html