【问题标题】:JSONParser suddenly error exception No value for [closed]JSONParser突然错误异常没有价值[关闭]
【发布时间】:2014-11-12 09:27:25
【问题描述】:

在我得到这个错误之前,我改变了我的表结构。 然后重新检查了查询和php vars,但我不知道为什么它给了我错误。 所以我在 php 中调用我的函数并成功生成 JSON 编码:

{
  "data": [{
  "id": "18",
  "jenis": "Kelas",
  "ruangan": "9120",
  "hari": "Selasa",
  "jam": "08:00:00"
  }],
"success": 1
}

我的 logcat 显示异常:jenis 没有价值。

private JSONParser jParser;
private ArrayList<HashMap<String, String>> ListKuliah;
private static final String TAG_SUCCESS = "success";
private static final String TAG_DATA = "data";
private static final String TAG_NPM = "npm";
private static final String TAG_KODE = "kode";
private static final String TAG_JENIS = "jenis";
private static final String TAG_RUANGAN = "ruangan";
private static final String TAG_HARI = "hari";
private static final String TAG_JAM = "jam";
private static final String TAG_ID_JADWAL = "id";
private static final String TAG_JUMLAH = "jumlah";
private String npm,kode;
private JSONArray data = null;

class getMatkul extends AsyncTask<String,String,String> {
    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
        String request = "getKelasByKode";
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("request", request));
        params.add(new BasicNameValuePair("npm", npm));
        params.add(new BasicNameValuePair("kode", kode));
        JSONObject json = jParser.makeHttpRequest("GET", params);   // getting JSON string from URL
        Log.d("All kelas: ", json.toString());  // Check your log cat for JSON reponse

        try {
            int success = json.getInt(TAG_SUCCESS);
            if (success == 1) { 
                data = json.getJSONArray(TAG_DATA);     // Getting Array of matkul
                for (int i = 0; i < data.length(); i++) {   // looping through All matkul
                    JSONObject arr = data.getJSONObject(i); // Storing each json item in variable
                    String jenis = arr.getString(TAG_JENIS);
                    String ruangan = arr.getString(TAG_RUANGAN);

                    HashMap<String, String> map = new HashMap<String, String>();    // creating new HashMap
                    map.put(TAG_JENIS, jenis);      // adding each child node to HashMap key => value
                    map.put(TAG_RUANGAN, ruangan);
                    ListKuliah.add(map);    // adding HashList to ArrayList
                }
            }
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(String file_url) {
        runOnUiThread(new Runnable() {
            public void run() {
                /**
                 * Updating parsed JSON data into ListView
                 * */
                ListAdapter adapter = new SimpleAdapter(DetailMatkul.this, ListKuliah, R.layout.list_kuliah, new String[] {TAG_JENIS, TAG_RUANGAN, TAG_HARI, TAG_JUMLAH},
                        new int[] { R.id.jenis, R.id.ruangan, R.id.hari, R.id.jumlah});
                setListAdapter(adapter);    // updating listview
            }
        });
    }
}

更新日志:

11-11 22:19:20.617: D/All kelas:(10879): {"data":[{"kode":"AIF401","sks":"4","nama":"Skripsi 1"}],"success":1}
11-11 22:19:20.617: W/System.err(10879): org.json.JSONException: No value for jenis
11-11 22:19:20.627: W/System.err(10879):    at org.json.JSONObject.get(JSONObject.java:355)
11-11 22:19:20.627: W/System.err(10879):    at org.json.JSONObject.getString(JSONObject.java:515)
11-11 22:19:20.627: W/System.err(10879):    at com.skripsi.sistemabsensi.DetailMatkul$getMatkul.doInBackground(DetailMatkul.java:104)
11-11 22:19:20.627: W/System.err(10879):    at com.skripsi.sistemabsensi.DetailMatkul$getMatkul.doInBackground(DetailMatkul.java:1)
11-11 22:19:20.627: W/System.err(10879):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-11 22:19:20.627: W/System.err(10879):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-11 22:19:20.627: W/System.err(10879):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-11 22:19:20.627: W/System.err(10879):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-11 22:19:20.627: W/System.err(10879):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-11 22:19:20.627: W/System.err(10879):    at java.lang.Thread.run(Thread.java:841)

更新:我找到了解决方案,所以几天前我将我的 url 变量替换为 JSONParser 类,这给了我错误。

【问题讨论】:

  • 您将 TAG_HARI 和 TAG_JUMLAH 添加到您在适配器中使用的 ArrayList HashMap 的位置。
  • 我的意思是,您的对象中没有 jenis 键
  • 在您的回复中,没有 jenis 或您使用过的其他密钥没有数据。
  • 响应对象不一样
  • 我没有添加 TAG_HARI 和 TAG_JUMLAH 导致 TAG_JENIS 给我错误,所以我只想知道问题出在哪里...

标签: android mysql json


【解决方案1】:

从日志中可以看出,响应对象是

{
 "data": [
{
  "kode": "AIF401",
  "sks": "4",
  "nama": "Skripsi 1"
}
],
"success": 1
}

并且不等于您的预期响应

{
"data": [{
"id": "18",
"jenis": "Kelas",
"ruangan": "9120",
"hari": "Selasa",
"jam": "08:00:00"
}],
"success": 1
}

它不包含您指定的任何标签。检查你的 php 代码。

【讨论】:

  • 响应对象是之前的活动。它不适用于当前的错误活动...
  • no.your log tag 是 "All kelas",,right???
  • 当前活动的日志是第2行到最后...json异常部分。
  • 检查你使用的日志标签..它的'All Kelas'
  • 如果您感到困惑,请尝试以下不同的日志标签。 Log.d("调试响应", json.toString());
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 2010-10-11
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多