【问题标题】:How to post json data to the server in android using retrofit2?如何使用retrofit2将json数据发布到android中的服务器?
【发布时间】:2018-12-25 03:25:44
【问题描述】:

这是我想将 json 发布到服务器的方式。问题是当我尝试使用我的改造回调发布此内容时
SaveCheques(CityID,ClientID,TotalCheques,checklist);
它给出了 Illegal Exception Expected BEGIN_OBJECT 但在第 1 行第 71 列路径 $.data.Cheques[0]

没有清单我的回应是成功的

SaveCheques(CityId,ClientId,TotalCheques);

{"data":{
"cityid":521,
     "clientid":16,
     "totalcheque":4,
     "Cheques":[
       {"chequeamount":20000,
        "chequenumber":12,
        "chequedate":"11/6/18",
        "chequeimage":"www.content.hytul/ddrfsss"
       },
       {"chequeamount":24000,
        "chequenumber":11,
        "chequedate":"11/6/18",
        "chequeimage":"www.content.hbbyul/sdrtfsbs"
       }       
     ]}
}

这些是我从架构中得到的 pogo 类

public class Cheques {

@SerializedName("chequeamount")
@Expose
private Integer chequeamount;
@SerializedName("chequenumber")
@Expose
private Integer chequenumber;
@SerializedName("chequedate")
@Expose
private String chequedate;
@SerializedName("chequeimage")
@Expose
private String chequeimage;

public  Cheques( Integer chequeamount , Integer chequenumber ,String chequedate, String chequeimage)
{
    this.chequeamount =chequeamount;
    this.chequenumber = chequenumber;
    this.chequedate = chequedate;
    this.chequeimage = chequeimage;

}

public Integer getChequeamount() {
    return chequeamount;
}

public void setChequeamount(Integer chequeamount) {
    this.chequeamount = chequeamount;
}

public Integer getChequenumber() {
    return chequenumber;
}

public void setChequenumber(Integer chequenumber) {
    this.chequenumber = chequenumber;
}

public String getChequedate() {
    return chequedate;
}

public void setChequedate(String chequedate) {
    this.chequedate = chequedate;
}

public String getChequeimage() {
    return chequeimage;
}

public void setChequeimage(String chequeimage) {
    this.chequeimage = chequeimage;
}

}

//对于数据类

public class Data {

@SerializedName("cityid")
@Expose
private Integer cityid;
@SerializedName("clientid")
@Expose
private Integer clientid;
@SerializedName("totalcheque")
@Expose
private Integer totalCheque;
@SerializedName("Cheques")
@Expose
private ArrayList<Cheques> cheques ;

public Integer getCityid() {
    return cityid;
}

public void setCityid(Integer cityid) {
    this.cityid = cityid;
}

public Integer getClientid() {
    return clientid;
}

public void setClientid(Integer clientid) {
    this.clientid = clientid;
}

public Integer getTotalCheque() {
    return totalCheque;
}

public void setTotalCheque(Integer totalCheque) {
    this.totalCheque = totalCheque;
}

public List<Cheques> getCheques() {
    return cheques;
}

public void setCheques(ArrayList<Cheques> cheques) {
    this.cheques = cheques;
}

}

//示例类

public class Example {

@SerializedName("code")
@Expose
private String code;
@SerializedName("msg")
@Expose
private String msg;

@SerializedName("data")
@Expose
private Data data;

public Data getData() {
    return data;
}

public void setData(Data data) {
    this.data = data;
}


public String getCode() {
    return code;
}

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

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

}

IN API 接口

 @FormUrlEncoded
@POST("dummy_chequedata.php")
Call<Example> SaveCheques(@Field("clientid") Integer ClientID,
                          @Field("cityid") Integer CityID,
                          @Field("totalcheque") Integer TotalCheques,
                          @Field("Cheques[]")ArrayList<Cheques> chequeslist
                        );

在活动中我有一个方法可以调用

apiInterface2 = ChequeApi.getChequeApi().create(Api.class);
    Call<Example> call = apiInterface2.SaveCheques(CityID,ClientID,TotalCheques,chequelist);


    call.enqueue(new Callback<Example>() {
        @Override
        public void onResponse(Call<Example> call, Response<Example> response) {
            if (response.isSuccessful()) {
                Log.d("onResponse", "" + response.message());
                //String data = response.body().toString();
                 // Cheqqlist = response.body().getData().getCheques();
                //Toast.makeText(Recieve_Payment.this, "dddddd", Toast.LENGTH_LONG).show();
                Toast.makeText(Recieve_Payment.this, response.body().getData().getCityid()+" "+response.body().getData().getClientid()+" "+response.body().getData().getTotalCheque()
                        , Toast.LENGTH_LONG).show();

            }
            else{
                Log.e("response:","response failiure");}
        }

        @Override
        public void onFailure(Call<Example> call, Throwable t) {
            Log.d("onFailure", t.toString());
        }
    });

我希望发布整个数据,并且在响应正文中我应该能够检索诸如 response.body().getData().getClientid() 之类的数据,并且很可能是这个 response.body().getData()。 getCheques() 和 getCheques() 中的所有支票金额、支票号码……都可以检索。

【问题讨论】:

  • 为什么字符串里面有数组符号? @Field("Cheques[]")ArrayList chequeslist
  • 我不知道如何发布数组,我假设你能说出来。

标签: android retrofit2


【解决方案1】:
@POST("dummy_chequedata.php")
Call<Example> SaveCheques(@Body Data detail);

这样调用api

Data detail = new Data();
detail.setCityid(CityID);
detail.setClientid(ClientID);
detail.setTotalCheque(TotalCheques);
detail.setCheques(chequelist);
Call<Example> call = apiInterface2.SaveCheques(detail);

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多