android - 索引 2 超出范围 JSON

标签 android json

作为我们的 Activity ,我们得到了这种json,我们被要求在android中的listview中显示它。但是,错误提示索引 2 超出范围。我是 android 编程的新手,请帮助我。

JSON

  {"aaData":[[
  8590614,
  " Jefferson",
  "Miranda",
  "N/A",
  "Regular",
  "N/A",
  "N/A",
  "N/A"
 ],
 [
  8590615,
  " Jeff",
  "Mir",
  "/A",
  "Probationary",
  "/A",
  "/A",
  "/A"
 ]]

}

代码:

 if (jsonStr != null) {
            try {

                JSONObject jsonObj = new JSONObject(jsonStr);
               employees = jsonObj.getJSONArray("aaData");
                for (int i = 0; i < employees.length(); i++) {

                        String id = employees.getString(0);
                        String firstname = employees.getString(1);
                        String lastname =employees.getString(2);
                        String group = employees.getString(3);
                        String status = employees.getString(4);
                        String paytype = employees.getString(5);
                        String workcode = employees.getString(6);
                        String shiftcode = employees.getString(7);
                        // tmp hashmap for single contact

                 HashMap<String, String> employee = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                    employee.put("id", id);
                    employee.put("first_name", firstname);
                    employee.put("last_name", lastname);
                    employee.put("group", group);
                    employee.put("status",status);
                    employee.put("paytype", paytype);
                    employee.put("workcode", workcode);
                    employee.put("shiftcode", shiftcode);

                        // adding employee to employee list

                    employeeList.add(employee);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

日志

07-06 13:05:54.758  22573-22589/**********_sample D/Response:﹕ > {"aaData":[[8590614," Jefferson","Miranda","N\/A","Regular","N\/A","N\/A","N\/A"],[8590615," Jeff","Miranda","N\/A","Probationary","N\/A","N\/A","N\/A"]]}  
07-06 13:05:54.761  22573-22589/**********_sample W/System.err﹕ org.json.JSONException: Index 2 out of range [0..2)  
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at org.json.JSONArray.get(JSONArray.java:293)  
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at org.json.JSONArray.getString(JSONArray.java:462)  
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at **********_sample.MainActivity$GetEmployees.doInBackground(MainActivity.java:116)  
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at com.example.piasi_pc1.api_sample.MainActivity$GetEmployees.doInBackground(MainActivity.java:84)
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:292)
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-06 13:05:54.764  22573-22589/**********_sample W/System.err﹕ at java.lang.Thread.run(Thread.java:818)  
07-06 13:05:55.037    1242-1265/system_process I/ActivityManager﹕ Displayed com.example.piasi_pc1.api_sample/.MainActivity: +852ms  
07-06 13:05:55.049    1242-1390/system_process I/WindowManager﹕ Switching to real app window: Window{313018ce u0 **********_sample/**********_sample.MainActivity}  
07-06 13:05:55.259    1316-1316/com.android.systemui W/ResourceType﹕ No package identifier when getting value for resource number 0x00000000  
07-06 13:05:55.260    1316-1316/com.android.systemui W/PackageManager﹕ Failure retrieving resources for **********_sample_1: Resource ID #0x0  
07-06 13:05:58.708    1242-1299/system_process D/TaskPersister﹕ removeObsoleteFile: deleting file=627_task.xml  
07-06 13:05:58.708    1242-1299/system_process D/TaskPersister﹕ removeObsoleteFile: deleting file=627_task_thumbnail.png  
07-06 13:11:46.047    1242-1259/system_process I/UsageStatsService﹕ User[0] Flushing usage stats to disk  

最佳答案

在 for 循环中创建另一个数组并尝试从该数组中获取数据

for (int i = 0; i < employees.length(); i++) {

JSONArray jA = employees.getJSONArray(i)

String id = jA.getString(0);

String firstname = jA.getString(1);

String lastname =jA.getString(2);

String group = jA.getString(3);

String status = jA.getString(4);

String paytype = jA.getString(5);

String workcode = jA.getString(6);

String shiftcode = jA.getString(7);

}

关于android - 索引 2 超出范围 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31238137/

相关文章:

java - 从 URL ionic 库加载图像时的适配器行为

json - 如何从 json 中获取 int 并将其解析为 dart 中的 bool?

java - 动态生成 JSON 的最佳方法

android - WebView 不能与 loadUrl 一起使用,但可以与 loadData 一起使用

android - 我无法在 flutter 项目中添加 Firebase 库

java - 我可以使用 Android 的测试框架测试状态栏通知吗?

json - 如何在 Ruby 中从 JSON 中获取特定字段

javascript - 防止 JavaScript 中嵌套 for 循环

json - 在正确的部分添加 JSON 值

android - Qt for Android 和 BoringSSL