Rxjava+Retrofit 简单使用

从去年开始就比较流行 Rxjava,Rxandroid,当然也有Retrofit 。

git地址:https://github.com/meijius/RxRetrofitDemo


1.bulid.gradle 文件


compile 'io.reactivex:rxjava:1.1.6'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'com.bigkoo:svprogresshud:1.0.2'
    compile 'com.jakewharton:butterknife:7.0.1'

2.封装network请求框架。

Network.java


public class Network {

    private static LiaoMeiApi zhuangbiApi;
    private static OkHttpClient okHttpClient = new OkHttpClient();
    private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
    private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJavaCallAdapterFactory.create();

    public static LiaoMeiApi getZhuangbiApi() {
        NetworkDialogUtils.getInstance().ShowNetworkDialog(); // 加载框
        if (zhuangbiApi == null) {
            Retrofit retrofit = new Retrofit.Builder()
                    .client(okHttpClient)
                    .baseUrl("http://www.560797.com/")
                    .addConverterFactory(gsonConverterFactory)
                    .addCallAdapterFactory(rxJavaCallAdapterFactory)
                    .build();
            zhuangbiApi = retrofit.create(LiaoMeiApi.class);
        }
        return zhuangbiApi;
    }
}

RxObserver.java  Rxjava 封装返回类


public abstract class RxObserver<T> extends Subscriber<T> {

    @Override
    public void onStart() {
        super.onStart();
    }

    @Override
    public void onCompleted() {
        NetworkDialogUtils.getInstance().HideNetworkDialog();
    }

    @Override
    public void onError(Throwable e) {
        NetworkDialogUtils.getInstance().HideNetworkDialog();
        Logger.e(this,e.getMessage());
        e.printStackTrace();
        //在这里做全局的错误处理
        if (e instanceof HttpException) {
             ToastUtils.getInstance().showToast(e.getMessage());
        }
        ToastUtils.getInstance().showToast(e.getMessage());

    }

    @Override
    public void onNext(T t) {
        onSuccess(t);
    }

    public abstract void onSuccess(T t);


}


LiaoMeiApi.java  Retrofit接口类


public interface LiaoMeiApi {

    /**
     * 这里需要稍作说明,@GET注解就表示get请求,@Query表示请求参数,将会以key=value的方式拼接在url后面    @QueryMap 传map 把key value丢进去
     * @POST注解就表示post请求,@Field表示请求参数,将会以表单的方式提交  @FieldMap 意思一样
     * 除此之外还有 @Body @Path 添加header等方法
     * @return
     */

    // http://www.560797.com/sms/login.html   account password
    @FormUrlEncoded
    @POST("sms/login")
    Observable<Rersults> login(@Field(value = "account", encoded = true) String account, @Field(value = "password", encoded = true) String pwd);

}


3.activity主代码


LoginActivity.java 


public class LoginActivity extends AppCompatActivity {

    @Bind(R.id.email)
    AutoCompleteTextView email;
    @Bind(R.id.password)
    EditText password;
    @Bind(R.id.content)
    TextView content;

    String account, pwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        ButterKnife.bind(this);
        NetworkDialogUtils.init(this);

    }

    @OnClick({R.id.email_sign_in_button})
    public void onClick(View view){
        switch (view.getId()){
            case R.id.email_sign_in_button:
                login();
                break;
        }
    }

    Observer<Rersults> observer = new RxObserver<Rersults>() {
        @Override
        public void onSuccess(Rersults s) {
            Toast.makeText(LoginActivity.this, s.getErrmsg(), Toast.LENGTH_SHORT).show();
            content.setText(s.toString());
        }
    };

    protected Subscription subscription;

    private void login(){
        account = email.getText().toString();
        pwd = password.getText().toString();
        if(TextUtils.isEmpty(account)){
            Toast.makeText(LoginActivity.this, "用户名不能为空!", Toast.LENGTH_SHORT).show();
            return;
        }
        if(TextUtils.isEmpty(pwd)){
            Toast.makeText(LoginActivity.this, "密码不能为空!", Toast.LENGTH_SHORT).show();
            return;
        }

        subscription = Network.getZhuangbiApi()
                .login("a123456", "a123456")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);

    }

}

4.其它相关类。

APPApplication

public class APPApplication extends Application {

    public void onCreate() {
        super.onCreate();
        init();
    }
    
    private void init() {

        ToastUtils.init(this);

    }
    
}

NetworkDialogUtils

public class NetworkDialogUtils {

    private static Context mContext;
    private static NetworkDialogUtils mInstance;
    private static SVProgressHUD svProgressHUD;
    private static boolean isShowHUD = true;

    public static NetworkDialogUtils getInstance() {
        return mInstance;
    }

    public static void init(Context ctx) {
        mInstance = new NetworkDialogUtils(ctx);
    }

    private NetworkDialogUtils(Context ctx) {
        mContext = ctx;
    }

    public void ShowNetworkDialog(){
        if(isShowHUD){
            if(svProgressHUD == null){
                svProgressHUD = new SVProgressHUD(mContext);
            }
            svProgressHUD.showWithStatus(mContext.getString(R.string.wait));
        }
    }

    public void HideNetworkDialog(){
        if(isShowHUD){
            if(svProgressHUD.isShowing()){
                svProgressHUD.dismiss();
            }
        }
    }
}

相关图片:










git地址:https://github.com/meijius/RxRetrofitDemo




  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又双㕛叕、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值