提问者:小点点

如何发布json数据到服务器在android使用RetreFit2?


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

没有检查名单我的反应是成功的

保存支票(城市ID、客户ID、支票总数);

{"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"
       }       
     ]}
}

这些是我从schema上得到的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;
}

}

INAPI接口

 @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
                        );

在Activity中,我有一个方法,我在其中调用

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());
        }
    });

我希望整个数据被张贴和响应体我应该能够检索数据像响应. body().getData().getClientid()和最有可能这个响应.body().getData().getCheques()和在getCheques()所有的支票金额,支票号码…


共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);