android - 无法在 Android 中解析 JSonArray

标签 android json arrays

我对此有些疑惑...

我有一个 PHP 脚本将以下 Json 字符串返回给 Android 应用程序。

{"result":"OK","teams":[{"id":"1","tname":"AAA","tcity":"Paris","tfy":"1901"},{"id":"2","tname":"BBB","tcity":"Barcelona","tfy":"1901"}]}

问题是,出于某种原因,我无法使用以下 Android 代码读取“团队”标识的 JSonArray:

@Override
    protected void onPostExecute(String result)
    {
        dialog.dismiss();

        try {
            JSONArray teams = null;
            JSONObject json_response = new JSONObject(result);

            if(json_response.get("result").toString().compareTo("ERR")==0) {
                AlertDialog.Builder adig = new AlertDialog.Builder(ListTeamsActivity.this);
                adig.setMessage(json_response.get("status").toString());
                adig.setCancelable(true);
                AlertDialog diag = adig.create();
                diag.show();
            } else {
                // process the answer
                Log.d("debug_msg", "Teams = " + json_response.get("teams").toString());

                teams = new JSONArray(json_response.getJSONArray("teams"));

                for(int n=0; n< teams.length(); n++) {
                    JSONObject t = teams.getJSONObject(n);
                    arrTeams[n] = t.getString("tname");
                    Log.d("debug_msg", "Team = " + t.getString("tname"));
                }

                ArrayAdapter<String> adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.activity_list_item, arrTeams);
                lv.setAdapter(adapter);
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

这总是导致相同的错误:

org.json.JSONException: Not a primitive array: class org.json.JSONArray

这是完整的输出:

03-25 14:15:19.577: D/debug_msg(1960): Response = {"result":"OK","teams":[{"id":"1","tname":"Sport Lisboa e Benfica","tcity":"Lisboa","tfy":"1901"},{"id":"2","tname":"Sport Lisboa e Benfica","tcity":"Lisboa","tfy":"1901"}]}
03-25 14:15:19.647: D/debug_msg(1960): Teams = [{"tname":"Sport Lisboa e Benfica","id":"1","tfy":"1901","tcity":"Lisboa"},{"tname":"Sport Lisboa e Benfica","id":"2","tfy":"1901","tcity":"Lisboa"}]
03-25 14:15:19.657: W/System.err(1960): org.json.JSONException: Not a primitive array: class org.json.JSONArray
03-25 14:15:19.677: W/System.err(1960):     at org.json.JSONArray.<init>(JSONArray.java:116)
03-25 14:15:19.687: W/System.err(1960):     at pt.iscte.daam.soccerleague.ListTeamsActivity$ListTeams.onPostExecute(ListTeamsActivity.java:113)
03-25 14:15:19.697: W/System.err(1960):     at pt.iscte.daam.soccerleague.ListTeamsActivity$ListTeams.onPostExecute(ListTeamsActivity.java:1)
03-25 14:15:19.697: W/System.err(1960):     at android.os.AsyncTask.finish(AsyncTask.java:632)
03-25 14:15:19.697: W/System.err(1960):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-25 14:15:19.707: W/System.err(1960):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
03-25 14:15:19.707: W/System.err(1960):     at android.os.Handler.dispatchMessage(Handler.java:102)
03-25 14:15:19.707: W/System.err(1960):     at android.os.Looper.loop(Looper.java:137)
03-25 14:15:19.707: W/System.err(1960):     at android.app.ActivityThread.main(ActivityThread.java:4998)
03-25 14:15:19.707: W/System.err(1960):     at java.lang.reflect.Method.invokeNative(Native Method)
03-25 14:15:19.717: W/System.err(1960):     at java.lang.reflect.Method.invoke(Method.java:515)
03-25 14:15:19.717: W/System.err(1960):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-25 14:15:19.717: W/System.err(1960):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-25 14:15:19.727: W/System.err(1960):     at dalvik.system.NativeStart.main(Native Method)

谢谢你的帮助....

最佳答案

为什么要创建一个新的 JSON 数组?您应该不需要创建一个新的,直接获取即可。

teams = json_response.getJSONArray("teams");

关于android - 无法在 Android 中解析 JSonArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643099/

相关文章:

java - Android中可以发生优先级倒置吗

java - 日期比 json 响应中的实际日期少一位

android - C++ 和 JNI - 如何将数组传递给 jfloatArray

arrays - 创建具有非整数增量的数组

c - 带指针和常规数组的二维数组? (在 C 中)

android - 根据传递的 Cursor 值展开/折叠 ExpandableListView 中的组节点?

Android 和特定通知

android - 为什么新地方 sdk 客户端兼容性脚本给我 - "Access is denied"

javascript - 包含 '@' 的 Json

python - Python中的JSON解析错误