浅谈Retrfit(网络请求)

来源:互联网 发布:八爪鱼大数据是什么 编辑:程序博客网 时间:2024/06/01 09:24

Retrfit与OKhttp共同出资square公司,与OK不同的事retrfit需要定义一个接口,用来返回我们的call对象,retrfit提供的请求方式为注解方式,有get和post。参数也是注解的方式。


它是一个可以用Android和java的网络库,使他可以简化我们的网络操作的工作,提高效率和正确率,retrfit是square公司开源的一个高质量高效率的http库,它将我们自己开发的底层代码和细节封装了起来,在没有retrfit,ok时,我们可能要去写get,post请求,但有了这些库后对于这些请求我们就需要一行代码或者一个注释。所有的网络通信核心任务只有一个,Cline端与server端进行数据交互与操作,所以retrfit将底层代码封装了起来,只暴露了我们业务中的数据模型和操作方法

retrfit的使用方法

网络权限:

<uses-permission android:name="android.permission.INTERNET"/>
官方最新依赖:

compile 'com.squareup.retrofit2:retrofit:2.0.1'//这是组合依赖。
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包

get请求方式

/**     * 无参get请求     * http://service.meiyinkeqiu.com/service/ads/cptj     *     * @return     */@POST("/api/cook/classify")Call<String> download();//泛型为String是因为增加返回值为String的支持泛型可为String可为Bean对
//不需要添加Gson包。已经添加过gson依赖Retrofit builder = new Retrofit.Builder().baseUrl(RetrofitService.BASE_GET)        //增加返回值为String的支持        .addConverterFactory(ScalarsConverterFactory.create())        //增加返回值为Gson的支持(以实体类返回)        .addConverterFactory(GsonConverterFactory.create())        .build();RetrofitService service = builder.create(RetrofitService.class);Call<String> call = service.downGet(1);call.enqueue(new Callback<String>() {    @Override    public void onResponse(Call<String> call, Response<String> response) {        Log.i("222",response.body()+"");    }    @Override    public void onFailure(Call<String> call, Throwable t) {    }});
//有参get请求  //https://api.github.com/users/baiiu  @GET("users/{user}")Call<String>  downget(@Path("user")String user);//接口地址做了封装
Retrofit builder = new Retrofit.Builder().baseUrl(RetrofitService.BASE_PATH)        //增加返回值为String的支持        .addConverterFactory(ScalarsConverterFactory.create())        //增加返回值为Gson的支持(以实体类返回)        .addConverterFactory(GsonConverterFactory.create())        .build();RetrofitService service = builder.create(RetrofitService.class);Call<String> call = service.downget("forever");call.enqueue(new Callback<String>() {    @Override    public void onResponse(Call<String> call, Response<String> response) {        Log.i("111",response.body()+"");    }    @Override    public void onFailure(Call<String> call, Throwable t) {    }});

//拼接接口地址后面为:?&@GET("/article/list/latest")Call<String>downGet(@Query("page")int a);
Retrofit builder = new Retrofit.Builder().baseUrl(RetrofitService.BASE_URL)        //增加返回值为String的支持        .addConverterFactory(ScalarsConverterFactory.create())        //增加返回值为Gson的支持(以实体类返回)        .addConverterFactory(GsonConverterFactory.create())        .build();RetrofitService service = builder.create(RetrofitService.class);Call<String> call = service.download();call.enqueue(new Callback<String>() {    @Override    public void onResponse(Call<String> call, Response<String> response) {        Log.i("1111",response.body()+"");    }    @Override    public void onFailure(Call<String> call, Throwable throwable) {    }});
/** * http://localhost:8080/08web/LoginServlet * post方式实现登录 */@POST("LoginServlet")@FormUrlEncodedCall<UserInfo> login(@Field("name") String name, @Field("pwd") String pwd);
//创建retrofitRetrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_POST).client(client).addConverterFactory(GsonConverterFactory.create()).build();//这里采用的是Java的动态代理模式RetrofitService retrofitService = retrofit.create(RetrofitService.class);//得到Call对象Call<UserInfo> argumentData = retrofitService.login("wowo", "520");//发送网络请求argumentData.enqueue(new Callback<UserInfo>() {    @Override    public void onResponse(Call<UserInfo> call, Response<UserInfo> response) {        UserInfo userInfo = response.body();        String name = userInfo.name;        Log.i("xxx", "name:" + name);    }    @Override    public void onFailure(Call<UserInfo> call, Throwable t) {    }});
/** * http://192.168.0.104:8080/08web/FileUploadServlet * post * 方式实现上传头像 */@Multipart@POST("08web/FileUploadServlet")Call<UserInfo> upload(@Part MultipartBody.Part file);
//创建retrofitRetrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_POST).client(client).addConverterFactory(GsonConverterFactory.create()).build();//这里采用的是Java的动态代理模式RetrofitService retrofitService = retrofit.create(RetrofitService.class);//拿到图片 fileFile file = new File(Environment.getExternalStorageDirectory(), "/Pictures/Screenshots/a.jpg");RequestBody requestFile =        RequestBody.create(MediaType.parse("application/otcet-stream"), file);MultipartBody.Part body =        MultipartBody.Part.createFormData("file", file.getName(), requestFile);final Call<UserInfo> upload = retrofitService.upload(body);upload.enqueue(new Callback<UserInfo>() {    @Override    public void onResponse(Call<UserInfo> call, Response<UserInfo> response) {        UserInfo userInfo = response.body();        String name = userInfo.name;        Log.i("xx", "name:" + name);    }    @Override    public void onFailure(Call<UserInfo> call, Throwable t) {    }});

                                             
1 0
原创粉丝点击