繁体   English   中英

将json数组插入sqlite数据库时出现空指针异常

[英]Null pointer Exception while inserting json array into sqlite database

    12-07 11:25:34.290: E/AndroidRuntime(9177): FATAL EXCEPTION: AsyncTask #2
12-07 11:25:34.290: E/AndroidRuntime(9177): java.lang.RuntimeException: An error occured while executing doInBackground()
12-07 11:25:34.290: E/AndroidRuntime(9177):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.lang.Thread.run(Thread.java:1096)
12-07 11:25:34.290: E/AndroidRuntime(9177): Caused by: java.lang.NullPointerException
12-07 11:25:34.290: E/AndroidRuntime(9177):     at com.UserLogin.Onaroundyou$getOnaroundyou.doInBackground(Onaroundyou.java:198)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at com.UserLogin.Onaroundyou$getOnaroundyou.doInBackground(Onaroundyou.java:1)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-07 11:25:34.290: E/AndroidRuntime(9177):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-07 11:25:34.290: E/AndroidRuntime(9177):     ... 4 more

当我尝试将json数组插入我的sqlite数据库时,出现此Nullpoint异常错误。 在Lline 198上,我们从jsonarray获取值并将其添加到内容值。

直到这一行,我得到的json响应值已经在日志中打印了键和值。 检查我是否得到任何空值。 但是值来的很好,我可以在日志中看到它们。 当我的deguger进入以下行时,我遇到了错误。 请帮助一次。

Evalues.put(InsertData.MyName,JSonArray1.getJSONObject(i).getString("MyName"));

提前致谢。

        private TextView tv;
        String str, Username, Eresult,Password;
        ProgressDialog dialog1;
        DatabaseHelper InsertEData;
        String attributeId ;
        Context mContext = this;
        SQLiteDatabase Edb ;
        JSONObject MyUserJsonObject;

    protected Void doInBackground(String... params) {
        // TODO Auto-generated method stub
                HttpClient httpclient = new DefaultHttpClient();
                // Dh.getWritableDatabase();

                String text1 = getString(R.string.site_name);
                String Url=text1+"Details";

                HttpPost httppost = new HttpPost(Url);


                try {
                HttpResponse responseGet = httpclient.execute(httppost);
                HttpEntity entity = responseGet.getEntity();
                if (entity != null) {
                    InputStream inputStreamResponse = entity.getContent();
                    Eresult = convertStreamToString(inputStreamResponse);
                    System.out.println(Eresult);
                    Edb= InsertEData.getWritableDatabase();

                    ContentValues Evalues = new ContentValues();
                    Evalues.clear();
                    MyUserJsonObject = new JSONObject(Eresult);

                    JSONObject menuObject = MyUserJsonObject.getJSONObject("UserDetails");
                    attributeId = menuObject.getString("login");

                    System.out.println("attribute  "+attributeId);
                    if (attributeId.equals("success")) {
                        JSONObject EObject = menuObject.getJSONObject("Ulist");
                        JSONArray EArray = EObject.getJSONArray("List");
                        System.out.println(EArray);
                        System.out.println(EArray.length());
                        for (int i = 0; i < EArray.length(); i++) {                             
                            //System.out.println(EArray.getJSONObject(0).getString("Name").toString());

                            Evalues.put(InsertEData.EName, EArray.getJSONObject(i).getString("MyName"));
                            Evalues.put(InsertEData.ELocation, EArray.getJSONObject(i).getString("Location"));
                            Evalues.put(InsertEData.ETotal, EArray.getJSONObject(i).getString("Total"));
                            Evalues.put(InsertEData.Eimage, EArray.getJSONObject(i).getString("Image"));
                            Edb.insert(InsertEData.ESLIST, null, Evalues );

                        }
                        Evalues.clear();

                        inputStreamResponse.close();

                    }else {
                        System.out.println("Unable to load page - " + responseGet.getStatusLine());
                    }
                }
                else
                    System.out.println("Entity Null");
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                System.out.println("Network Error");
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }

            return null;}

看来您的数组返回空值。

请保留日志并检查并进行控制台。

“谁能知道为什么会这样。”

简短的答案是:因为某些对象在不应存在的地方为null 可能的罪魁祸首可能是InsertDataJSonArray1JSonArray1.getJSONObject(i)的结果。

没有更多细节,很难找出确切原因。 我建议您断点代码以查找问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM