Android Retrofit 接入——post方式发送表单,返回数据转换为JavaBean(一)

对于Retrofit,一直都没用过,因为一直在使用自己封装的Okhttp3.0 来实现网络请求,最近接到一个比较简单的项目,想着,就当作学习了,在项目中接入Retrofit,本文章只是简单接入Retrofit 。调试接口。

Retrofit 官方地址

官方中有简单的接入方法:

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();

GitHubService service = retrofit.create(GitHubService.class);
Call<List<Repo>> repos = service.listRepos("octocat");

对于这些注释的解释,网上也有很多博主写的文章介绍,自行百度。

首先在grade中导入:

    //Retrofit
   compile 'com.squareup.retrofit2:retrofit:2.2.0'
    //将返回的结果转换为JavaBean   Gson
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
    //转换为String
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0'

Retrofit的初始化

 Retrofit  retrofit = new Retrofit.Builder()
                .baseUrl(QpAddress.baseUrl)
                .addConverterFactory(ScalarsConverterFactory.create())//将返回数据转化为String的转换器
                .addConverterFactory(GsonConverterFactory.create())//将返回数据转化为JavaBean的转换器
                .build();

  QpApiService      mApiService = retrofit.create(QpApiService.class);

QpAddress

注意这里的网址必须以”/”结束,不然会报错

Caused by: java.lang.IllegalArgumentException: baseUrl must end in /: http://api.club.auldey.com/aCloud/index.php


 Caused by: java.lang.IllegalArgumentException: baseUrl must end in /: http://api.club.auldey.com/aCloud/index.php```
public class QpAddress {
    public  static  String baseUrl;
    public  static void  setDebug(boolean isDebug){

        if (isDebug){
            baseUrl="http://192.168.199.105:8090/aCloud/index.php/";
        }else {
            baseUrl="http://api.club.auldey.com/";
        }
    }
}

QpApiService

public interface QpApiService {
    /**
     * 获取广告轮播图
     * @param map  a=api
     *             method=customized.thread.design
     *             moduleid=10
     *             appid=9FprO7RiGjFknxPo,
     *             random=ica3gjycxqy2
     *             tick=1521600960
     *             sign=NWNjMzY3MDY0ODQ2NmI4OTMyYWNhYzkyNDMyMjJkODg2ZmY3YWQwMw==
     * @return
     */
    @FormUrlEncoded
    @POST("aCloud/index.php")
    Call<BaseData<List<BannerBean>>> getBanners(@FieldMap Map<String, String> map);
}

返回的son 数据如下

{
  "code":"0",
  "info":[
    {
      "data_id":"91127",
      "title":"【规则】奥飞俱乐部发帖规则1.0",
      "url":"http://mobile.club.auldey.com/index/thread/tid/6752/fid/6.html",
      "thumb":"http://club.auldey.com/attachment/module/10/4f491059de7e0d5.jpg"
    },
    {
      "data_id":"91140",
      "title":"感谢陪伴丨我们永远在你身边",
      "url":"http://club.auldey.com/read.php?tid=6255&fid=6&page=1",
      "thumb":"http://club.auldey.com/attachment/module/10/d0f66945ae37988.jpg"
    },
    {
      "data_id":"93474",
      "title":"超级飞侠——出行安全小贴士",
      "url":"http://mobile.club.auldey.com/index/thread/tid/6758/fid/2.html",
      "thumb":"http://club.auldey.com/attachment/module/10/37c3d85bff5c866.jpg"
    }
  ]
}

最外层是一个JSONObject,然后info 对应则是JSONArray.
这时如果想让放回的数据直接转换为JavaBean,就需要一个BaseData先将数据解析JavaBean

BaseData


public class BaseData<T> {

    /**
     * {"code":"0","info":data}
     */

    private String code;
    private T info;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public T getInfo() {
        return info;
    }

    public void setInfo(T info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "BaseData{" +
                "code='" + code + '\'' +
                ", info=" + info +
                '}';
    }
}
注意:这里的T info  变量名一定要是info,不可以更改,不然会造成{code='0', info=null}

BannerBean
将这个JSON转换为JavaBean

{
      "data_id":"91127",
      "title":"【规则】奥飞俱乐部发帖规则1.0",
      "url":"http://mobile.club.auldey.com/index/thread/tid/6752/fid/6.html",
      "thumb":"http://club.auldey.com/attachment/module/10/4f491059de7e0d5.jpg"
}
public class BannerBean {

    private String data_id;
    private String title;
    private String url;
    private String thumb;

    public String getData_id() {
        return data_id;
    }

    public void setData_id(String data_id) {
        this.data_id = data_id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getThumb() {
        return thumb;
    }

    public void setThumb(String thumb) {
        this.thumb = thumb;
    }

    @Override
    public String toString() {
        return "BannerBean{" +
                "data_id='" + data_id + '\'' +
                ", title='" + title + '\'' +
                ", url='" + url + '\'' +
                ", thumb='" + thumb + '\'' +
                '}';
    }
}

执行

//生成一个post的map集合,可以自己写一个HashMap来实现
    QpPostMap qpPostMap=new QpPostMap.Builder().
                addMethod("customized.thread.design")
                .addModuleid("10")
                .addAppid("9FprO7RiGjFknxPo")
                .addRandom("ica3gjycxqy2")
                .addTick("1521600960")
                .addSign("NWNjMzY3MDY0ODQ2NmI4OTMyYWNhYzkyNDMyMjJkODg2ZmY3YWQwMw==")
                .build();

 mApiService.getBanners(qpPostMap.getMap()).enqueue(new Callback<BaseData<List<BannerBean>>>() {
            @Override
            public void onResponse(Call<BaseData<List<BannerBean>>> call, Response<BaseData<List<BannerBean>>> response) {
                BaseData<List<BannerBean>> baseData = response.body();
                LogUtils.e("获取的数据==" + baseData.toString());

            }

            @Override
            public void onFailure(Call<BaseData<List<BannerBean>>> call, Throwable t) {

            }
        });

打印的数据如下:

BaseData{code='0', info=[BannerBean{data_id='91127', title='【规则】奥飞俱乐部发帖规则1.0', url='http://mobile.club.auldey.com/index/thread/tid/6752/fid/6.html', thumb='http://club.auldey.com/attachment/module/10/4f491059de7e0d5.jpg'}, BannerBean{data_id='91140', title='感谢陪伴丨我们永远在你身边', url='http://club.auldey.com/read.php?tid=6255&fid=6&page=1', thumb='http://club.auldey.com/attachment/module/10/d0f66945ae37988.jpg'}, BannerBean{data_id='93474', title='超级飞侠——出行安全小贴士', url='http://mobile.club.auldey.com/index/thread/tid/6758/fid/2.html', thumb='http://club.auldey.com/attachment/module/10/37c3d85bff5c866.jpg'}]}

这样就实现简单的使用Retrofit 实现数据请求。并将返回的数据转化为JavaBean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您使用Retrofit发送POST请求@Body方式处理数据库参数,可以按照以下步骤进行操作: 1. 创建一个Java类,用于存储参数。例如,如果您要向数据库添加一条用户记录,可以创建一个名为User的Java类,其属性包括用户名,密码等等。 ```java public class User { private String username; private String password; public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public String getPassword() { return password; } } ``` 2. 在Retrofit接口中定义POST请求,使用@Body注解将User对象作为请求体发送到服务器。 ```java public interface ApiService { @POST("users") Call<Void> createUser(@Body User user); } ``` 3. 在应用中使用Retrofit对象创建接口实例,并调用createUser方法。 ```java // 创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); // 创建接口实例 ApiService apiService = retrofit.create(ApiService.class); // 创建User对象 User user = new User("username", "password"); // 发送POST请求 Call<Void> call = apiService.createUser(user); call.enqueue(new Callback<Void>() { @Override public void onResponse(Call<Void> call, Response<Void> response) { // 请求成功 } @Override public void onFailure(Call<Void> call, Throwable t) { // 请求失败 } }); ``` 上述代码将向服务器发送一条POST请求,将User对象作为请求体发送到服务器。如果请求成功,服务器将会将User对象存储到数据库中。如果请求失败,将会调用onFailure方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值