Android网络请求框架Retrofit详解

时间:2021-05-20

介绍:

Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。本文使用Retrofit2.0.0版本进行实例演示。

使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式。

同步请求:需要在子线程中完成,会阻塞主线程。

Response response = call.execute().body();

异步请求:请求结果在主线程中回调,可以在onResponse()回调方法进行更新UI。

call.enqueue(Callback callback)

使用步骤:

(1) 创建工程,添加jar:

compile 'com.squareup.retrofit2:retrofit:2.0.0'compile 'com.squareup.retrofit2:converter-gson:2.0.0' //这两个jar版本要一致,否则会有冲突

(2) 创建业务请求接口,具体代码如下

/** * 创建业务请求接口 */public interface IUserService { /** * GET请求 */ @GET("Servlet/UserServlet") Call<User> getUser(@Query("email") String email); /** * POST请求 */ @FormUrlEncoded @POST("UserServlet") Call<User> postUser(@Field("name") String name, @Field("email") String email);}

解释说明:

@GET注解表示GET请求,@Query表示请求参数,将会以key=value(@Query注解参数名称为key,调用传进来的值为value)的方式拼接在url后面.

@POST注解表示POST请求,@FormUrlEncoded将会自动将请求参数的类型设置为application/x-"); call.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { } @Override public void onFailure(Call<User> call, Throwable throwable) { } });

服务端接收到的结果:

(3)文件上传:

private void uploadFile() { Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .baseUrl(Constant.BASE_URL) .build(); IUserService iUserService = retrofit.create(IUserService.class); File file = new File("/sdcard/s.png"); RequestBody fileRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part multipartBody = MultipartBody.Part.createFormData("upload_file", file.getName(), fileRequestBody); String desc = "this is file description"; RequestBody descRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), desc); Call<ResponseBody> call = iUserService.uploadFile(descRequestBody, multipartBody); call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { Log.i("debug", "upload success"); } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { } }); }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章