RxAndroid 与 Retrofit的使用

来源:互联网 发布:豚鼠系列 知乎 编辑:程序博客网 时间:2024/05/22 13:23

Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。

首先使用Retrofit进行网络请求:

 导入依赖:

 compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2'
实际请求中主要用到的是get和post请求,对应的Retrofit提供的请求方式注解有@GET和@POST,参数注解有@PATH和@Query。@PATH指的是通过参数填充完整的径,@Query就是请求的键值对的设置。下面实例为使用Retrofit进行请求并使用gson进行解析:

public class MainActivity extends AppCompatActivity {    private TextView tv,tv1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv = (TextView) findViewById(R.id.tv);        tv1 = (TextView) findViewById(R.id.tv1);        tv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                 getdata();            }        });    }    void getdata() {   //创建Retrofit对象        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://b2b.yoyoce.com/index.php/mobile/Member/")                .addConverterFactory(GsonConverterFactory.create())                .build();        Date movieService = retrofit.create(Date.class);        Call<Bean_data> call = movieService.getTopMovie(162);        call.enqueue(new Callback<Bean_data>() {            @Override            public void onResponse(Call<Bean_data> call, Response<Bean_data> response) {               tv1.setText(response.body().getResult().getTitle());            }            @Override            public void onFailure(Call<Bean_data> call, Throwable t) {            }        });    }    interface Date {        @POST("goodsdetail")        Call<Bean_data> getTopMovie(@Query("id") int id);    }}
下面介绍Retrofit与RxAndroid的结合:

导入依赖:

compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'(与retrofit的版本号一致)compile 'io.reactivex:rxandroid:1.0.1'

具体代码:

public class MainActivity extends AppCompatActivity {    private TextView tv, tv1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv = (TextView) findViewById(R.id.tv);        tv1 = (TextView) findViewById(R.id.tv1);        tv.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                getdata();            }        });    }    void getdata() {        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://b2b.yoyoce.com/index.php/mobile/Member/")                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        Date movieService = retrofit.create(Date.class);        movieService.getTopMovie(162)                .subscribeOn(Schedulers.newThread())//请求在新的线程中执行                .observeOn(Schedulers.io())         //请求完成后在io线程中执行                .doOnNext(new Action1<Bean_data>() {                    @Override                    public void call(Bean_data userInfo) {                    }                })                .observeOn(AndroidSchedulers.mainThread())//最后在主线程中执行                .subscribe(new Subscriber<Bean_data>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                        //请求失败                    }                    @Override                    public void onNext(Bean_data userInfo) {                        //请求成功                        Toast.makeText(MainActivity.this, userInfo.getResult().getTitle(), Toast.LENGTH_SHORT).show();                    }                });    }        interface Date{        @POST("goodsdetail")        Observable<Bean_data> getTopMovie(@Query("id") int id);    }}






阅读全文
0 0