JSONObject的java.lang.NullPointerException错误

时间:2014-06-11 10:20:40

标签: java android sqlite pointers memory

当我尝试从我的API抓取帖子并尝试插入发布我的SQLite数据库时,我在此行pdao.majPost(c);上遇到了java.lang.NullPointerException。

我的JSON解析器类:

private PostsDAO pdao;

public void data() {

    AsyncHttpClient client = new AsyncHttpClient();
    client.get("http://twitter.192.168.1.38.xip.io/api/v1/posts", new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {

            JSONObject data;
            JSONArray posts;
            try {
                data = new JSONObject(response);

                // Traitement des posts
                posts = data.getJSONArray("posts");
                for (int i = 0; i < posts.length(); i++) {
                    JSONObject c = posts.getJSONObject(i);
                    pdao.majPost(c);
                }

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

        }
    });

}

我的PostDAO文件

public void majPost(JSONObject c) throws JSONException {
    ContentValues values = new ContentValues();
    values.put("id_post", c.getInt("id_post"));
    values.put("id_user", c.getInt("id_user"));
    values.put("content", c.getString("content"));
    values.put("photo", c.getString("photo"));
    values.put("masked", c.getInt("masked"));
    values.put("deleted", c.getInt("deleted"));
    values.put("created_at", c.getString("created_at"));
    values.put("updated_at", c.getString("updated_at"));
    db.insert("posts", null, values);
}

6 个答案:

答案 0 :(得分:1)

试试这个......

PostsDAO pdao = new PostsDAO();

答案 1 :(得分:1)

你忘记初始化pdao,这就是为什么它发射空指针,初始化它:

PostsDAO pdao = new PostsDAO();

答案 2 :(得分:1)

尝试这个

private PostsDAO pdao = new PostsDAO();

答案 3 :(得分:1)

使用以下

PostsDAO pdao = new PostsDAO();

因为你从未初始化pdao

 PostsDAO pdao=null;

而不是初始化

pdao = new PostsDAO();

答案 4 :(得分:0)

为了安全使用JSON,请使用:

jsonObject.optString("string_key", "fallback");
jsonObject.optInt("int_key", -1);

或只是

jsonObject.optString("string_key");
jsonObject.optInt("int_key");

并检查是否为空。

这个想法是 opt 不会抛出异常,但如果密钥不存在或出现问题,它将返回null。

答案 5 :(得分:0)

刚刚将你的方法majPost设为静态,并将其称为PostDAO.majPost();