如何在 Android 的改造请求中传递 JSON 对象并检索 JSON 对象?
Posted
技术标签:
【中文标题】如何在 Android 的改造请求中传递 JSON 对象并检索 JSON 对象?【英文标题】:How to pass JSON object and retrieve JSON object in retrofit request in Android? 【发布时间】:2015-12-13 17:23:22 【问题描述】:我需要使用Retrofit
在Post
请求中传递Json
。我的Json
看起来像这样:
"q":
"reg": "IND",
"or": [
"duration": "12"
]
,
"sort": "recent"
我使用jsonschema2pojo为上面的Json
创建了pojo
,类似于:RoomListing.java
class
现在我需要发出post
请求。所以我创建了一个API
public interface RoomListingAPI
@GET("/api/fetch")
void getRoomListing(@Header("x-parse-session-token") String
token, @Body RoomListing list);
创建了一个RestAdapter
类
return new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.build();
RoomListingAPI apiservice = restadapter.providesRestAdapter().create(RoomListingAPI.class);
现在我有点困惑发送Json
(看看RoomListing.java)作为post
请求并接收JSON
作为响应?
任何帮助都将不胜感激。
【问题讨论】:
为什么不把你的 json 作为字符串发送?并使用 import org.json.JSONArray 和 import org.json.JSONObject 来创建 json 结构。 我在改造中没有找到任何直接发送 JSON 的示例。 我发送了一个 JSON 作为字符串改造/POST,给我一些时间给你看。 【参考方案1】:首先,您需要将注解从@GET
更改为@POST
以执行POST
请求。接下来,假设您使用的是 Retrofit 1.9.x,您需要执行以下两项操作之一来获取结果 JSON 响应,具体取决于您需要同步还是异步响应:
void
更改为响应的 pojo 类型,类似于您创建请求对象的方式(例如 ResponseType yourMethod(@Body RequestType object);
异步(在不同的线程上,带有回调) - 在方法的末尾添加一个Callback<ResponseType>
,然后将在成功或不成功的请求返回时调用(例如void yourMethod(@Body RequestObject object, Callback<ResponseType> callback);
【讨论】:
我想在 JsonObject 中获取响应,因为它是动态 JSON 那么改造不是最好的选择 - 看看使用像 Volley 这样可以为你提供 JSONObjects 的东西 - 改造的设计是类型安全的,涵盖了“vanilla”案例 web 请求。 我们不能将 JSON 对象作为 post 请求发送并接收 JSON 对象吗?【参考方案2】: public interface RoomListingAPI
@POST("/api/fetch")
void getRoomListing(@Header("x-parse-session-token") String
token, @Field("YOURFIELDNAME") String json);
//This method generates your json
private String yourJSON()
JSONObject jsonRoot = new JSONObject();
JSONObject jsonObject1 = new JSONObject();
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject2 = new JSONObject();
try
jsonArray.put(jsonObject2);
jsonObject2.put("duration", "12");
jsonObject1.put("reg", "IND");
jsonObject1.put("or", jsonArray);
jsonRoot.put("q", jsonObject1);
jsonRoot.put("sort", "recent");
catch (JSONException e)
e.printStackTrace();
return jsonRoot.toString();
RoomListingAPI apiservice = restadapter.providesRestAdapter().create(RoomListingAPI.class);
apiservice.getRoomListing("your_header_token",yourJSON())...
我希望你工作,但应该是这样的。
【讨论】:
感谢您的回答,但我的请求中没有YOURFIELDNAME
。我只是将JSON
作为原始格式传递给Body
以上是关于如何在 Android 的改造请求中传递 JSON 对象并检索 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在正文中传递api参数而不是@Query标签android kotlin改造