如何在改造Android中发送对象数组?

时间:2015-12-23 12:32:50

标签: android retrofit

我在服务调用中传递了以下对象数组。

    [
  {
    "ParkingSpace": {
        "sid": "WorldSensing.vhu6lom3sovk6ahpogebfewk5kqadvs4.5385fc250cf2497dfe5679d1"
    }
}, 
  {
    "ParkingSpace": {
        "sid": "WorldSensing.vhu6lom3sovk6ahpogebfewk5kqadvs4.5385ff2f0cf2497dfe567c0c"
    }
}, 
  {
    "ParkingSpace": {
        "sid": "WorldSensing.vhu6lom3sovk6ahpogebfewk5kqadvs4.5385fd700cf2e65ecf6330c6"
    }
}, {
    "ParkingSpace": {
        "sid": "WorldSensing.vhu6lom3sovk6ahpogebfewk5kqadvs4.5385fefe0cf2497dfe567bee"
    }
}, {
    "ParkingSpace": {
        "sid": "WorldSensing.vhu6lom3sovk6ahpogebfewk5kqadvs4.5385ff690cf2497dfe567c3f"
    }
}, {
    "ParkingSpace": {
        "sid": "WorldSensing.vhu6lom3sovk6ahpogebfewk5kqadvs4.55e972d21170d0c2fd7d15b1"
    }
}]

我正在尝试如下:

private String generateParkingspaceBody(final List<String> listOfsIds) {

        //sids array
        JSONArray sidsArray = new JSONArray();

        for (String sId: listOfsIds) {

            //creating sidObject and object
            JSONObject sIdObject = new JSONObject();
            JSONObject object = new JSONObject();


            try {
                sIdObject.put("sid", sId);
                object.put("ParkingSpace",sIdObject);
                sidsArray.put(object);
            } catch (JSONException e) {
                CPALog.e(TAG,e.getMessage());
            }



        }
        return sidsArray.toString();
    }

将此字符串发送到服务调用中,如:

 Response getNearByParkingSpaces(@Header("Authorization") String accessToken,
                                    @Header("Content-Type") String contentType,
                                    @Body String arrayOfSids);

但是在logact中显示的请求是:

"[{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}},{\"ParkingSpace\":{}}]"

请帮帮我,如何发送此请求?

提前致谢。

2 个答案:

答案 0 :(得分:9)

您无需将对象转换为JSONArray,Retrofit会自动为您执行此操作。

只需将您的API方法声明更改为:

@Headers({
        "Content-type: application/json"
})
Response getNearByParkingSpaces(@Header("Authorization") String accessToken,
                                    @Body List<String> arrayOfSids);

答案 1 :(得分:0)

我遇到相同的问题,通过添加以下依赖项来解决此问题:

implementation 'com.squareup.retrofit2:converter-scalars:$version'

现有多种用于各种数据格式的翻新转换器。您可以将Java对象序列化和反序列化为JSON或XML或任何其他数据格式,反之亦然。在可用的转换器中,您还会找到Retrofit Scalars转换器,它可以解析要放入请求正文中的所有Java原语。转换适用于两个方向:请求和响应。 https://futurestud.io/tutorials/retrofit-2-how-to-send-plain-text-request-body

然后,您可以将generateParkingspaceBody用作发布的值。

generateParkingspaceBody.toString()  as your request body