Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从使用ArrayList创建的JSONObject中获取所有值?_Java_Android_Json_Decode - Fatal编程技术网

Java 如何从使用ArrayList创建的JSONObject中获取所有值?

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

我试图通过AsyncTask从json数据中获取值。我只得到最后一个值,我不明白为什么

我试图用for-each解析,但我做错了:

这是我的密码:

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,所以对我来说不一样。抱歉我不理解。