如何使用自定义对象作为参数创build一个Volley JSONObject请求?

我试图使用Volley库的一个JSONObject POST请求到一个服务器,该服务器需要2个参数,一个对象(地址)和一个不同的对象(租户)列表。

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

我的请求看起来像这样:

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

我的postPropertyJSONObject是这样创build的:

 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 } 

当我通过它之前login地址的请求看起来像这样:

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

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

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

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

编辑

使用wbelarmino的提示,我切换到使用散列表来存储我的自定义对象,并从中创build一个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()); } }); 

在android usingvolley中查看更多Http请求