Java 如何从使用ArrayList创建的JSONObject中获取所有值?
我试图通过AsyncTask从json数据中获取值。我只得到最后一个值,我不明白为什么 我试图用for-each解析,但我做错了: 这是我的密码:Java 如何从使用ArrayList创建的JSONObject中获取所有值?,java,android,json,decode,Java,Android,Json,Decode,我试图通过AsyncTask从json数据中获取值。我只得到最后一个值,我不明白为什么 我试图用for-each解析,但我做错了: 这是我的密码: private class DecodeData extends AsyncTask<String, Void, String> { protected ArrayList<HashMap<String, String>> decodedArray; protected
private class DecodeData extends AsyncTask<String, Void, String> {
protected ArrayList<HashMap<String, String>> decodedArray;
protected HashMap<String, String> decodedMap;
protected Iterator<String> it;
protected JSONArray m_Array;
protected JSONObject object;
protected String response;
protected String keys;
protected String value;
@SuppressWarnings("unchecked")
@Override
protected String doInBackground(String... params) {
response = params[0];
keys = "";
value = "";
object = null;
decodedArray = new ArrayList<HashMap<String, String>>();
try {
JSONArray arrayResp = new JSONArray(response);
for (int i = 0; i < arrayResp.length(); i++) {
decodedMap = new HashMap<String, String>();
it = arrayResp.getJSONObject(i).keys();
while (it.hasNext()) {
keys = (String)it.next();
value = Base64.DecodeStrToStr((String)arrayResp.getJSONObject(i).get(keys));
decodedMap.put("\""+keys+"\"", "\""+value+"\"");
object = new JSONObject(decodedMap.toString());
Log.i("DECODED MAP : ", object.toString());
m_Array = new JSONArray();
m_Array.put(object);
Log.i("M_ARRAY", ""+m_Array);
}
// decodedArray.add(decodedMap);
}
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// array = new JSONArray(decodedArray);
return m_Array.toString();
}
私有类解码数据扩展异步任务{
受保护的ArrayList解码Darray;
受保护的HashMap-decodedMap;
受保护的迭代器;
受保护的JSONArray m_阵列;
受保护的JSONObject对象;
受保护字符串响应;
受保护的字符串键;
保护字符串值;
@抑制警告(“未选中”)
@凌驾
受保护的字符串doInBackground(字符串…参数){
响应=参数[0];
密钥=”;
value=“”;
object=null;
decodedArray=newarraylist();
试一试{
JSONArray arrayResp=新JSONArray(响应);
对于(int i=0;i
我使用截击来获得响应。之后,我用这个响应创建一个JSONArray,并从中获取所有键/值。我将所有键/值都放在Hashmap中。但是当我将键/值放在这里时:m_Array.put(object),它只放入我的json数据的最后一个值。有人知道我做错了什么吗?请在开始for循环之前创建JSONArray
m_Array = new JSONArray();
JSONArray arrayResp = new JSONArray(response);
for (int i = 0; i < arrayResp.length(); i++) { ....
m_Array=new JSONArray();
JSONArray arrayResp=新JSONArray(响应);
对于(inti=0;i
可能是因为您在for循环中创建映射,从而在每次迭代中创建一个新映射-这就是旧条目丢失的原因。还有一件事需要考虑:在映射中放置两个具有相同键的键值对将“覆盖”上一个pair@Anton我试过你说的你试过创造m吗_数组也在循环之外?现在它在每次迭代中都会被再次创建很有趣,你(@Fcps)说你尝试了Anton的解决方案,但它不起作用,而这正是他说要做的…@Takendark他说我在for循环中创建了我的映射,它是JSONArray,所以对我来说不一样。抱歉我不理解。