Retofit + RxJava 请求数据

这一篇文章给大家介绍现在非常火的一种网络请求数据的方式:Retofit + RxJava

前几篇介绍到了Retofit 和RxJava,现在就给大家直接上代码了,也是非常简单的。


具体使用


1.添加依赖

 
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    // Retrofit库
    compile 'com.squareup.okhttp3:okhttp:3.1.2'
    // Okhttp库
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
    //gson解析器
    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
    //Retrofit支持Rxjava
2.添加权限

<uses-permission android:name="android.permission.INTERNET"/>

3.实现代码:

MainActivity的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="liuhao.baway.com.retrofitandrxjava.MainActivity">

    <TextView
        android:id="@+id/textview"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示获取的数据" />

</RelativeLayout>
MainActivity页面的实现逻辑:

记住写代码的时候要时常注意,千万不要导错包,要不你会很不好找错。

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private TextView tv;

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

        tv = (TextView) findViewById(R.id.textview);

        RetrofitUntils.getRetrofitUntils(this).get("106", new NetClickListener() {
            @Override
            public void Suesses(BaseBean baseBean) {
                if(baseBean.getCode().equals("0")){
                    tv.setText(baseBean.getMsg());
                }
            }

            @Override
            public void Error(String msg) {
                  Toast.makeText(MainActivity.this, msg,Toast.LENGTH_SHORT).show();
            }
        });

    }
}
请求网络所用到的网络请求数据的封装类,在这里我用到了单例模式,保证使用唯一的实例。
import android.content.Context;
import okhttp3.OkHttpClient;
import retrofit2.GsonConverterFactory;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
 * Created by 15218 on 2017/11/5.
 */
public class RetrofitUntils {

    private static RetrofitUntils retrofitUntils;

    private Context context;

    private RetrofitUntils(Context context){
        this.context = context ;
    }

    public static RetrofitUntils getRetrofitUntils(Context context){
        if(retrofitUntils==null){
            synchronized (RetrofitUntils.class){
                if(retrofitUntils==null){
                    retrofitUntils = new RetrofitUntils(context);
                }
            }
        }
        return  retrofitUntils ;
    }

    public void get(String uid, final NetClickListener netClickListener){
        OkHttpClient.Builder ok = new OkHttpClient.Builder();
        ok.addInterceptor(new LogInterceptor());
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://120.27.23.105/")//这里的url与实现接口中的url拼接成一个完整的URL
                .client(ok.build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        retrofit.create(Retrofit_Interface.class).getBean(uid)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<BaseBean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        if(netClickListener!=null){
                            netClickListener.Error(e.getMessage().toString());
                        }
                    }

                    @Override
                    public void onNext(BaseBean baseBean) {
                        if(baseBean.getCode().equals("0")){
                            if(netClickListener!=null){
                                netClickListener.Suesses(baseBean);
                            }
                        }
                    }
                });
    }


}

请求对象的接口:

import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by 15218 on 2017/11/5.
 */
public interface Retrofit_Interface {
    @GET("product/getCarts")//在这里我们用到了Retrofit的get请求
    Observable<BaseBean> getBean(@Query("uid") String uid);
	//正常网络请求用Call就可以了,但是我们是和Rxjava结合一起使用,所以使用被观察者对象
}
其它的回调接口,bean对象,log日志打印拦截器,都与上篇  

OKHttp + RxJava的一样在这里就不一一展示了

其实这篇文字与上篇写的一样就是换了个请求网络的框架。好了,就写到这里,多多支持,谢谢大家!!!


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值