天天看点

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

    }

}