gpt4 book ai didi

android - 如何使用自定义对象作为参数发出 Volley JSONObject 请求?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:02 26 4
gpt4 key购买 nike

我正在尝试使用 Volley 库向服务器发出 JSONObject POST 请求,该服务器采用 2 个参数,一个对象(地址)和一个不同对象的列表(租户)。

当我尝试发出请求时,第一个参数(地址)在发送之前由 Volley 格式化,并且服务器不接受该请求。

我的请求看起来像这样:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, SERVER_URL,
postPropertyJSONObject, responseListener, errorListener)

我的 postPropertyJSONObject 是这样创建的:

JSONObject obj = new JSONObject();
obj.put("Address", convertAddressToJson(property.getAddress()).toString());
obj.put("Tenants", prop.getTenantList());

convertAddressToJson() 方法如下所示:

JSONObject jsonObject= new JSONObject();
jsonObject.put("Building", address.getBuilding());
jsonObject.put("Street", address.getStreet());
jsonObject.put("Town", address.getTown());
jsonObject.put("ZipCode", address.getZipCode());
jsonObject.put("County", address.getCounty());
jsonObject.put("Country", address.getCountry());

我尝试只传入地址对象,但这根本没有序列化,所以它也不起作用。我还尝试在请求中使用的 JSONObject 的“地址”字段中传递 Address.toString(),但这也不起作用。

我的 Property 对象的 getAddress() 方法返回一个 Address 对象,它看起来像这样:

public class Address {

private String Street;
private String Building;
private String Town;
private String ZipCode;
private String County;
private String Country;
// getters and setters
}

当我在传递请求之前记录地址时,它看起来像这样:

{"Town":"MyTown","Street":"MyStreet","County":"MyCounty","Country":"MyCountry",
"ZipCode":"MyZipCode","Building":"MyBuilding"}

但是当服务器记录它收到的内容时,它看起来像这样:

{\"Town\":\"MyTown\",\"Street\":\"MyStreet\",\"County\":\"MyCounty\",
\"Country\":\"MyCountry\",\"ZipCode\":\"MyZipCode\",\"Building\":\"MyBuilding\"}"

Volley 应用的这种格式设置似乎改变了我在请求中传递的值,所以任何人都可以告诉我是否有更好的方法来处理这个应该相对简单的任务?我已经使用 String 和 Integer 值向同一服务器发出请求,但在尝试将自定义类作为参数传递时遇到了这个问题。

编辑

根据 wbelarmino 的提示,我转而使用 HashMap 来存储我的自定义对象并从中创建了一个 JSONObject:

HashMap<String, Address> params = new HashMap<String, Address>();
params.put("Address", prop.getAddress());
requestObject = new JSONObject(params);

最佳答案

你可以试试这个:

final String URL = "/volley/resource/12";

发送给服务器的参数

HashMap<String, String> params = new HashMap<String, String>();
params.put("token", "AbCdEfGh123456");

JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
});

查看更多 Http requests in android usingvolley

关于android - 如何使用自定义对象作为参数发出 Volley JSONObject 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com