首先我們知道retrofit本身是不能進行網絡請求的,他是要内部依賴其他網絡請求庫,在retrofit1中它是OKhttp 但是現在的retrofit2中可以支援其他的比如說volley:
所有第三方庫都要引包這裡你這樣做:
compile 'com.squareup.retrofit2:retrofit:2.3.0'
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) {
}
});
}
//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);
}
}