如何使用包含JSONArray的JSONObject进行改造来进行PUT

时间:2017-04-27 09:06:08

标签: android json mobile retrofit2

我试图从凌空转换到改造,我不完全理解如何使用包含JSONArray的JSONObject进行PUT。

我想发送给服务器的JSONObject主体应如下所示:

{
“account”: [
    {“availability”: “offline”} 
]}

这是我的pojo

public class AvailabilityModel {

JSONObject account;

public AvailabilityModel(JSONObject account) {
    this.account = account;
 }
}

和我的界面

public interface AvailabilityAPI {

@Headers( "Content-Type: application/json" )
@PUT(PATH)
Call<AccountParentModel> setAvailability(@Path("parameter") String accountId, @Body AvailabilityModel object);

class Factory {

    private static AvailabilityAPI service;

    public static AvailabilityAPI getInstance() {

        if (service == null) {

            Retrofit retrofit = new Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(App.BASE_URL)
                    .build();

            return service = retrofit.create(AvailabilityAPI.class);
        } else {
            return service;
        }
    }
}

}

最后,在我的活动中,我这样做:

 JSONObject account = new JSONObject();
    JSONArray array = new JSONArray();
    JSONObject obj = new JSONObject();

    try {
        obj.put("availability", "offline");
    } catch (JSONException e) {
        e.printStackTrace();
    }


    array.put(obj);
    try {
        cloudNumber.put("account", array);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    Log.e(this.getClass().getSimpleName(), "JSONObj sent to the server is: " + account);

    AvailabilityModel availabilityModel = new AvailabilityModel(account);

        AvailabilityAPI.Factory.getInstance().setAvailability(accountId, availabilityModel).enqueue(new Callback<AccountParentModel>() {
        @Override
        public void onResponse(Call<CloudNumberParentModel> call, Response<CloudNumberParentModel> response) {
            Log.e("HomeActivity", "Success: availability = " + response.body().cloudNumbers.get(0).getAvailability());
        }

        @Override
        public void onFailure(Call<CloudNumberParentModel> call, Throwable t) {
            Log.e(this.getClass().getSimpleName(), " No good bro " + t.getMessage());
        }
    });

问题是服务器以这种格式接收它:

{“nameValuePairs”:{“account”:{“values”:[{“nameValuePairs”:{“availability”:“available”}}]}}}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

不要那样做..

让我简单介绍一下,了解一下。

步骤1.接受你的json要求。
在你的情况下

{  “account”: [   {“availability”: “offline”}    ]}

第2步。制作模特课。
我在这里描述Link

因此,在您的情况下,您的模型类是。

public class AvailabilityModel {


private List<AccountBean> account;

public List<AccountBean> getAccount() {
    return account;
}

public void setAccount(List<AccountBean> account) {
    this.account = account;
}

public static class AccountBean {
    /**
     * availability : offline
     */

    private String availability;

    public String getAvailability() {
        return availability;
    }

    public void setAvailability(String availability) {
        this.availability = availability;
    }
}
}

第3步:将值放入模型类

首先

AccountBean account =  new AccountBean();  
account.setAvailability("offline");

现在拿一个数组

List<AccountBean>list = new List<AccountBean>();
list.add(account);

以上是您的帐户列表。现在是完成制作模型的一步。

AvailabilityModel model =new AvailabilityModel();  
model. setAccount(list);

快乐编码:)