美文网首页
Retrofit,RxJava

Retrofit,RxJava

作者: TsuiJin | 来源:发表于2016-08-05 14:02 被阅读24次

    Retrofit是用来简化访问服务器API的工具。依赖于OkHttp。

      compile 'com.squareup.okhttp3:okhttp:3.4.1'
      compile 'com.squareup.retrofit2:retrofit:2.1.0'
      compile 'com.squareup.retrofit2:converter-gson:2.0.0'
    

    以从http://gank.io/api/data/福利/10/1 中提取json数据为例子。

    1. 首先创建一个接口,新建ApiService.java。

      public interface ApiService {
            @GET("data/福利/" + 10 + "/{page}")
            Call<GirlPageBean> getData(
                    @Path("page") int page);
        }
    

    2. 同上篇文章一样,利用Gsonformat生成GirlPageBean,用于存储从网上拉下来的数据

    上篇文章一样,略。

    3. 在子线程获取数据

        //初始化数据
        public void initData(){
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                        getData(1);
                }
            }, 100);
        }
    
        /**
         * 获取测试数据
         */
        private void getData(int index)  {
    
            //1.创建Retrofit对象
            Retrofit retrofit = new Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(Constant.BASE_URL)
                    .build();
    
            //2.创建访问请求
            ApiService service = retrofit.create(ApiService.class);
            Call<GirlPageBean> call = service.getData(index);
    
            //3.发送请求
            call.enqueue(new Callback<GirlPageBean>() {
                @Override
                public void onResponse(Call<GirlPageBean> call, Response<GirlPageBean> response) {
                    //4.处理结果
                    if (response.isSuccessful()){
                        GirlPageBean result = response.body();
                        data.addAll(analysisResult(result));
                    }
    
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            adapter.notifyDataSetChanged();
                            mSwipeRefreshLayout.setRefreshing(false);
                            adapter.notifyItemRemoved(adapter.getItemCount());
                            Toast.makeText(MainActivity.this, "下载完成," + adapter.getItemCount(), Toast.LENGTH_SHORT).show();
                        }
                    });
                }
    
                @Override
                public void onFailure(Call<GirlPageBean> call, Throwable t) {
    
                }
            });
    
        }
    

    另外,RxJava也比较火,和Retrofit一起,用起来很好用

    下面是最简单的用法,详细可以看博文http://gank.io/post/56e80c2c677659311bed9841

    1. 先更改上面的ApiService接口中的

         @GET("data/福利/" + 10 + "/{page}")
         Call<GirlPageBean> getData(
             @Path("page") int page);
      

          @GET("data/福利/" + 10 + "/{page}")
          public Observable<GirlPageBean> getData(       
              @Path("page") int page);
    

    注意这里的Observable需要import rx.Observable;

    1. 再更改上面在子线程获取数据中那一步,其中的的创建访问请求:

       //2.创建访问请求 
       ApiService service = retrofit.create(ApiService.class);
       service.getData(index)
                       .subscribeOn(Schedulers.io())
                       .observeOn(AndroidSchedulers.mainThread())
                       .subscribe(
                               new Subscriber<GirlPageBean>() {
                                   @Override
                                   public void onCompleted() {
      
                                   }
      
                                   @Override
                                   public void onError(Throwable e) {
      
                                   }
      
                                   @Override
                                   public void onNext(GirlPageBean girlPageBean) {
                                       data.addAll(analysisResult(girlPageBean));
                                       adapter.notifyDataSetChanged();
                                       mSwipeRefreshLayout.setRefreshing(false);
                                       adapter.notifyItemRemoved(adapter.getItemCount());
                                       Toast.makeText(MainActivity.this, "下载完成," + adapter.getItemCount(), Toast.LENGTH_SHORT).show();
      
                                   }
                               }
                       );
      

    作为例子的Demo:
    https://github.com/GinSmile/GankSimple

    相关文章

      网友评论

          本文标题:Retrofit,RxJava

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