關于Retrofit+RxJava實現網絡請求

最近在寫一個Demo,然后在想,我要用什么網絡請求才能夠在Demo裝逼,然后翻遍簡書,最后確定了用Retrofit2.0+RxJava來實現網絡請求;下面就簡單的寫下這東西。。
首先,最重要的是導包

Paste_Image.png

這里必須注意Retrofit2.0的幾個包的版本必須相同,一定要注意!完成之后,我們開始初始化Retrofit2.0。在Application里面

public static Retrofit getApiRetrofit() {   
         if (retrofit == null) {        
               retrofit = new Retrofit.Builder() 
                            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//這里是添加RxJava工廠
                            .addConverterFactory(GsonConverterFactory.create())//這里是添加Gson工廠
                            .baseUrl(getPath()) //請求地址               
                            .build();   
         }    
        return retrofit;
  }

Path我就不貼出來了;接下來我們就看看請求怎么寫

Paste_Image.png

這里就以Interface的方式來寫請求。

/**
  * Created by Chen Ri Ming on 2016/10/25.
  * 登錄接口 
  */
  public interface LoginService {    
          @POST("index/login")//這里請求時POST請求,所有在這里寫的是@POST,如果是GET請求,那么就是@GET,括號里面就是你的登錄接口。
          //以Observable開始就是RxJava的形式去請求網絡,如果是Call,那就是單純的使用Retrofit了。    
          Observable<LoginBean> login(            
                          @Header("sign")String sign,//@Heander這個表示是請求頭,("sign")表示請求字段,String sign,這也就是參數了。           
                          @Header("time")int time,            
                          @Query("username")String username,//@Query是請求參數,("username")是請求時要傳的參數,String username是需要上傳的參數
                          @Query("password")String password    );
  }

好,就這樣我們的請求接口是完成了,接下來那就是請求了

Paste_Image.png

首先要調用初始化,這樣才能夠拿到真正的Retrofit。拿到之后,那么就開始寫請求了。

final LoginService loginService = retrofit.create(LoginService.class);
      loginService.login(MingTuApplication.getSgin(),MingTuApplication.getTime(),currentUsername,currentPassword) 
               .subscribeOn(Schedulers.newThread())//請求在新的線程中執行請求 
               .observeOn(Schedulers.io())         //請求完成后在io線程中執行   
               .observeOn(AndroidSchedulers.mainThread())//在主線程中執行  
               .subscribe(new Subscriber<LoginBean>() {
                      @Override            
                      public void onCompleted() {
                        //走完整個請求之后進入這個方法            
                      }            
                      @Override            
                      public void onError(Throwable e) {
                                //請求錯誤的時候走的方法              
                               Log.d("error_login",e.getMessage());           
                      }            
                      @Override            
                      public void onNext(LoginBean loginBean) { 
                               //請求成功之后走的方法               
                               switch (loginBean.getCode()){                   
                                      case 1000:                        
                                          String uid = loginBean.getData().getUid();                        
                                          String gender = loginBean.getData().getGender(); 
                                          String avater =loginBean.getData().getLogo();                        
                                          String profession =loginBean.getData().getProfession();  
                                          String reg_time = loginBean.getData().getReg_time();   
                                          String username = loginBean.getData().getUsername();   
                                          String token = loginBean.getData().getToken();                       
                                          String nickname = loginBean.getData().getNickname();  
                                          SharedPreferences sharedPreferences = MingTuApplication.applicationContext.getSharedPreferences("userlogincall",MODE_APPEND); 
                                          SharedPreferences.Editor editor = sharedPreferences.edit();
                                          editor.putString("uid",uid);   
                                          editor.putString("gender",gender);   
                                          editor.putString("avater",avater);     
                                          editor.putString("profession",profession);  
                                          editor.putString("reg_time",reg_time);   
                                          editor.putString("username",username);
                                          editor.putString("nickname",nickname); 
                                          editor.putString("token",token); 
                                          editor.apply();
                                          UserInfoCacheSvc.createOrUpdate(uid,username,avater); 
                                          getloginHX(uid); 
                                       break;                    
                                       default:                        
                                         ToastUtils.ToastMessage(LoginActivity.this,"錯誤"+loginBean.getCode());                        
                                       break;                
                                    }            
                                }        
                            });

這里就是完整的請求過程,看起來是很漂亮的,很完整的。Nice!

就這樣,整個過程走完了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,811評論 25 708
  • 聲明:原創作品,轉載請注明出處http://www.lxweimin.com/p/7b839b7c5884[http...
    蛇發女妖閱讀 104,221評論 116 878
  • 今天天變了臉,雖然有天氣預報,但是昨天的攝氏二十以上和今天的十度以下的大反差還是讓人很不舒服,收起的厚棉衣又得拿出...
    竇家香閱讀 111評論 0 0
  • 張愛玲說:“愿你生命中有足夠多的云翳,來構成一個美麗的黃昏。”萬分慶幸,在所有的云翳之中都有您的諄諄教導,我才撥云...
    建立于磐石閱讀 389評論 0 0
  • 以前,除了工作,總愛瞎操心,到處跑跑顛顛,沒見干什么事情,還總覺得很忙,難得有一些休閑時光,就是呆在家里看看...
    花香001閱讀 348評論 0 0