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);
}
}