天天看點

retrofit2架構基本使用

 首先我們知道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);

    }

}