如何将 API 重放的 JSON 中的值放到另一个 API 发布方法的主体中?
Posted
技术标签:
【中文标题】如何将 API 重放的 JSON 中的值放到另一个 API 发布方法的主体中?【英文标题】:How to put a value from a JSON replayed by an API to the body of another API post method? 【发布时间】:2019-09-13 03:41:06 【问题描述】:我有这个项目,我在其中获得了一些 url/endpoints/API 作为资产。我想获取在第一个 API 的 JSON 数组(“结果”)的每个对象中找到的字符串的值(“id”),并将其用作另一个 API 调用的主体参数。
我有一个 API(获取所有点),其中我在正文中传递一个标记,并获得一个带有结果数组的 JSON 对象(这些结果是一些点)。一切都很好。这是问题所在:对于我的下一个 API(获取点详细信息),我需要从上一个 API 响应中遍历“结果”数组中的每个对象(点)并获取其“id”值。然后,我将使用该 id 作为 Get spot details API 的主体参数,因此当我从点列表中单击一个项目时,它将打开一个包含该点详细信息的新活动。
我尝试将 id 放在 ArrayList 中,使其成为静态等,但是当我尝试将 id 作为参数传递时,它给出了错误代码 500。
//Get all spots result with the array in which I have to get each "id" value
"result": [
"id": "0dEGTxlKxh",
"name": "27-Waam",
"country": "India",
"whenToGo": "APRIL",
"isFavorite": true
,
"id": "s7uMTLEM6g",
"name": "2nd Bay",
"country": "Morocco",
"whenToGo": "AUGUST",
"isFavorite": true
, ...
//The id (taken from the prvious list of spots) that I need to put in the body of Get spot details POST request
"spotId": "DqeOFHedSe"
//Example of result by Get spot details API with the id of the clicked spot in the list
"result":
"id": "DqeOFHedSe",
"name": "Pocitas Beach",
"longitude": -81.08,
"latitude": -4.11,
"windProbability": 87,
"country": "Ecuador",
"whenToGo": "OCTOBER",
"isFavorite": true
//Request details using volley for the clicked spot
try
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id)
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
StringRequest requestDetails = new StringRequest(Request.Method.POST, GET_SPOT_DETAILS,
new Response.Listener<String>()
@Override
public void onResponse(String response)
try
JSONObject result = new JSONObject(response);
SpotInfo.name = result.getString("name");
SpotInfo.country = result.getString("country");
/*SpotInfo.latitude = result.getDouble("latitude");
SpotInfo.longitude = result.getDouble("longitude");
SpotInfo.windPbb = result.getDouble("windProbability");*/
SpotInfo.whenToGo = result.getString("whenToGo");
catch (JSONException e)
Log.d(TAG, "Error when parsing all details in JSON.", e);
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.d(TAG, "OnErrorResponse", error);
)
@Override
protected Map<String, String> getParams()
Map<String, String> params = new HashMap<String, String>();
params.put("spotId", idArray.get(position)); //I think here is the problem
return params;
;
queue.add(requestDetails);
startActivity(new Intent(MainActivity.this, SpotInfo.class));
);
catch(
Exception e)
Log.e("OnItemClick", "OnItemClick error.", e);
//Iterating through the spots provided by Get allspots request
private static ArrayList<KitesurfingSpot> getAllSpotsFromJsonResult(String spotJSON)
if(TextUtils.isEmpty(spotJSON))
return null;
ArrayList<KitesurfingSpot> spots = new ArrayList<>();
try
JSONObject baseJsonResponse = new JSONObject(spotJSON);
JSONArray resultsArray = baseJsonResponse.getJSONArray("result");
for(int i=0; i < resultsArray.length(); i++)
JSONObject spot = resultsArray.getJSONObject(i);
idStrings.add(spot.getString("id")); //Here I get the id
String name = spot.getString("name");
String country = spot.getString("country");
KitesurfingSpot kitesurfingSpot = new KitesurfingSpot(name, country, R.drawable.star_off);
spots.add(kitesurfingSpot);
catch (JSONException e)
Log.e(TAG, "Problem parsing the kitesurfing spot JSON result.", e);
return spots;
【问题讨论】:
【参考方案1】:为什么不使用强类型类并使用 json 库进行序列化和反序列化,而不是解释请求/响应。
如果您可以修改这两个项目或与作者合作,您还可以将共享汇编器与合同类一起使用。
【讨论】:
以上是关于如何将 API 重放的 JSON 中的值放到另一个 API 发布方法的主体中?的主要内容,如果未能解决你的问题,请参考以下文章