Retrofit,RxJava

Retrofit是用來(lái)簡(jiǎn)化訪問(wèn)服務(wù)器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數(shù)據(jù)為例子。

1. 首先創(chuàng)建一個(gè)接口,新建ApiService.java。

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

2. 同上篇文章一樣,利用Gsonformat生成GirlPageBean,用于存儲(chǔ)從網(wǎng)上拉下來(lái)的數(shù)據(jù)

上篇文章一樣,略。

3. 在子線程獲取數(shù)據(jù)

    //初始化數(shù)據(jù)
    public void initData(){
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                    getData(1);
            }
        }, 100);
    }

    /**
     * 獲取測(cè)試數(shù)據(jù)
     */
    private void getData(int index)  {

        //1.創(chuàng)建Retrofit對(duì)象
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(Constant.BASE_URL)
                .build();

        //2.創(chuàng)建訪問(wèn)請(qǐng)求
        ApiService service = retrofit.create(ApiService.class);
        Call<GirlPageBean> call = service.getData(index);

        //3.發(fā)送請(qǐng)求
        call.enqueue(new Callback<GirlPageBean>() {
            @Override
            public void onResponse(Call<GirlPageBean> call, Response<GirlPageBean> response) {
                //4.處理結(jié)果
                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一起,用起來(lái)很好用

下面是最簡(jiǎn)單的用法,詳細(xì)可以看博文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. 再更改上面在子線程獲取數(shù)據(jù)中那一步,其中的的創(chuàng)建訪問(wèn)請(qǐng)求:

     //2.創(chuàng)建訪問(wèn)請(qǐng)求 
     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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • retrofit和rxjava最近比較火,但是他們確實(shí)讓代碼架構(gòu)更加清楚了。 先介紹一下適用三者需要的配置: 1....
    hl_arrom閱讀 484評(píng)論 0 1
  • 沒(méi)有看過(guò)Retrofit&&RXJava傻瓜式入門(上)的同學(xué)可以簡(jiǎn)單了解下。 官網(wǎng)給出的文檔指出RXJava是一...
    blink_dagger閱讀 1,053評(píng)論 5 17
  • 每個(gè)應(yīng)用基本都會(huì)涉及到文件的上傳或下載,最普遍的一般也就是上傳頭像或者照片,下載安裝包了,本篇文章就這兩點(diǎn)簡(jiǎn)單說(shuō)一...
    沐沐小風(fēng)閱讀 5,396評(píng)論 0 1
  • 利用retrofit/rxjava2做一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)請(qǐng)求、效果是一個(gè)輪播圖。(輪播圖使用的是Banner插件,網(wǎng)址...
    沙灘上玩耍的孩紙閱讀 362評(píng)論 0 0
  • 再見(jiàn)了暑假的第二周就這么過(guò)去了,這一周充實(shí)而美好,又給我們的童年增加了一分色彩。 這周每天早上我都堅(jiān)...
    張豪沖閱讀 197評(píng)論 0 0

友情鏈接更多精彩內(nèi)容