在 android Studio 中迭代包含列表/数组的 JSON 对象
Posted
技术标签:
【中文标题】在 android Studio 中迭代包含列表/数组的 JSON 对象【英文标题】:Iterate A JSON Object containing list/array in android Studio 【发布时间】:2021-11-13 11:27:57 【问题描述】:我有一个像这样的 JSON 对象(将从flask API 返回到android Studio),
[
"Drug_Name": "Lepirudin"
,
"Drug_Name": "Cetuximab"
,
"Drug_Name": "Geptanolimab"
,
"Drug_Name": "Narsoplimab"
,
"Drug_Name": "Ieramilimab"
,
"Drug_Name": "Vibostolimab"
,
"Drug_Name": "Volagidemab"
,
"Drug_Name": "Quavonlimab"
,
"Drug_Name": "AK119"
,
"Drug_Name": "Allocetra"
]
这就是在 Flask 应用程序中获取这些数据的方式
myCursor=myConnection.cursor()
#query
SQLcommand="SELECT Drug_Name FROM Drug_Description"
#executing above query
myCursor.execute(SQLcommand)
row_headers=[x[0] for x in myCursor.description] #this will extract row headers
rv = myCursor.fetchall()
json_data=[]
for result in rv:
json_data.append(dict(zip(row_headers,result)))
return jsonify (json_data)
这就是我在 android Studio 中获取 json 对象的方式
String url = "https://********.herokuapp.com/";
RequestQueue queue = Volley.newRequestQueue(getContext());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>()
@Override
// When It works
public void onResponse(JSONObject response)
try
//get the json object and iterate it here
, new Response.ErrorListener()
@Override
// If it doesnt work what to do (Errors)
public void onErrorResponse(VolleyError error)
Toast.makeText(getContext(),"Try
Again",Toast.LENGTH_LONG).show();
);
queue.add(jsonObjectRequest);
如何遍历这些值并将每个药物名称保存在 android studio (java) 中的字符串数组中。
【问题讨论】:
【参考方案1】: private void getdata()
String url = "https://********.herokuapp.com/";
RequestQueue queue = Volley.newRequestQueue(getContext());
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>()
@Override
public void onResponse(JSONArray itemArray)
List<String> allDrugs = new ArrayList<String>();
for (int i=0; i<itemArray.length(); i++)
JSONObject data = itemArray.getJSONObject(i);
String name = data.getString("Drug_Name");
allDrugs.add(name);
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
);
requestQueue.add(jsonArrayRequest);
可能需要稍作修改,但您或多或少可以使用此功能。
【讨论】:
收到此错误W/System.err: org.json.JSONException: Not a primitive array: class org.json.JSONArray W/System.err: at org.json.JSONArray.<init>(JSONArray.java:118)
在此代码:JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() @Override public void onResponse(JSONArray response) List<String> allDrugs = new ArrayList<String>(); JSONArray itemArray= null; try itemArray = new JSONArray(response);
我已经更新了我的答案,请立即查看。它必须有效。
好的,我一会儿检查一下,让你知道以上是关于在 android Studio 中迭代包含列表/数组的 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Studio 中创建一个包含多个对象的列表视图
如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?