版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35189116/article/details/72675341
首先我们知道retrofit本身是不能进行网络请求的,他是要内部依赖其他网络请求库,在retrofit1中它是OKhttp 但是现在的retrofit2中可以支持其他的比如说volley:
所有第三方库都要引包这里你这样做:
/*retrofit2*/
compile 'com.squareup.retrofit2:retrofit:2.3.0'
/*retrofit2低层依赖网络请求库这里选择okhttp*/
compile 'com.squareup.okhttp3:okhttp:3.4.1'
/ /这里使用了黄油刀,相信大家不陌生
compile 'com.jakewharton:butterknife:7.0.1'
好了基本代码都在这了 注释很详细我就不废话了:
public class MainActivity extends AppCompatActivity {
@Bind(R.id.tv)TextView tv;
@Bind(R.id.btn1)
Button btn1;
private Retrofit retrofit;
private SeeHouseService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//1.创建retrofit对象
retrofit = new Retrofit.Builder()
//内部依赖网络请求库
.client(new OkHttpClient())
//接口主页(加上/)
.baseUrl("http://ikft.house.qq.com/")
.build();
//3.通过retrofit对象创建一个实现了该接口的类对象
service = retrofit.create(SeeHouseService.class);
}
@OnClick(R.id.btn1)
public void onViewClicked() {
//4.通过该对象去实现接口方法得到call
//Call<ResponseBody> cityListByUrl = service.getCityListByUrl();
Call<ResponseBody> webViewByUrl = service.getWebViewByUrl(1);
//5.通过call来获得数据
webViewByUrl.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call,final Response<ResponseBody> response) {
if(response.isSuccessful()){
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
String s = response.body().string();
Log.d("ok", Thread.currentThread().getName());
//onResponse方法是在当前线程执行,而okhttp则是在子线程
tv.setText(s);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
/* cityListByUrl.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {
if (response.isSuccessful()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
String s = response.body().string();
Log.d("ok", Thread.currentThread().getName());
//onResponse方法是在当前线程执行,而okhttp则是在子线程
tv.setText(s);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.d("ok", "onFailure() called with: call = [" + call + "], t = [" + t + "]");
}
});*/
}
//2.定义一接口
public interface SeeHouseService {
//这里不加/ 最终URL就是base+这里
@GET("index.php?guid=866500021200250&devua=appkft_1080_1920_XiaomiMI4LTE_1.8.3_Android19&act=kftcitylistnew&channel=71&devid=866500021200250&appname=QQHouse&mod=appkft")
Call<ResponseBody> getCityListByUrl();
@GET("index.php?guid=866500021200250&devua=appkft_1080_1920_XiaomiMI4LTE_1.8.3_Android19&devid=866500021200250&appname=QQHouse&mod=appkft&act=homepage&channel=71")
Call<ResponseBody>getWebViewByUrl(@Query("cityid")Integer cityid);
}
}