Исключение нулевого указателя при вставке массива json в базу данных sqlite - PullRequest
1 голос
/ 07 декабря 2011
    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;}

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Похоже, ваш массив возвращает нулевое значение.

Пожалуйста, ведите журнал, проверьте и сохраните.

0 голосов
/ 07 декабря 2011

"Кто-нибудь может знать, почему это происходит?"Потенциальными виновниками могут быть InsertData, JSonArray1 или результат JSonArray1.getJSONObject(i).

Без подробностей сложно точно определить точную причину.Я предлагаю вам установить точку останова для кода, чтобы найти проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...