浅谈Retrfit(网络请求)

本文详细介绍Retrofit库的使用方法,包括如何配置环境、定义接口及实现GET、POST等不同类型的网络请求。同时,提供了丰富的示例代码帮助读者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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")
@FormUrlEncoded
Call<UserInfo> login(@Field("name") String name, @Field("pwd") String pwd);
//创建retrofit
Retrofit 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);
//创建retrofit
Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_POST).client(client).addConverterFactory(GsonConverterFactory.create()).build();
//这里采用的是Java的动态代理模式
RetrofitService retrofitService = retrofit.create(RetrofitService.class);
//拿到图片 file
File 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) {

    }
});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值