关于Retrofit+RxJava实现网络请求

最近在写一个Demo,然后在想,我要用什么网络请求才能够在Demo装逼,然后翻遍,最后确定了用Retrofit2.0+RxJava来实现网络请求;下面就简单的写下这东西。。
首先,最重要的是导包

关于Retrofit+RxJava实现网络请求_第1张图片
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我就不贴出来了;接下来我们就看看请求怎么写

关于Retrofit+RxJava实现网络请求_第2张图片
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 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    );
  }

好,就这样我们的请求接口是完成了,接下来那就是请求了

关于Retrofit+RxJava实现网络请求_第3张图片
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() {
                      @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!

就这样,整个过程走完了。

你可能感兴趣的:(关于Retrofit+RxJava实现网络请求)