Intereting Posts
Android java regex соответствует всем, кроме одного символа Textarea в браузерах Android, скрытых клавиатурой Ошибка камеры 10000 андроида – что это такое? Chips UI для пользовательских данных в Android. (OR) Настройка библиотеки klinker41 / android-chips для обработки пользовательских данных (кроме EMAIL и CONTACTS) Как проверить все запущенные службы в android? Цикл Android MediaPlayer имеет пробелы даже с форматом OGG Почему родные потоки ведут себя по-разному, когда приложение находится в фоновом режиме? PlacePicker.IntentBuilder закрывается сразу после открытия Удалите тень ActionBar на Android L (API 21) Ошибка Android Studio: «Вы должны установить репозиторий поддержки Android, хотя менеджер SDK» Billingservice Android – Нет подписи Ошибка компиляции Android Hello-World: Intellij не может найти aapt Как управлять настраиваемой настройкой предпочтений Получите правильную ширину окна после изменения размера или события changechange для Android Сеть недоступна: connect

Ошибка нулевого указателя в async-задаче

Я получаю исключение нулевого указателя при обработке данных JSON, я проверил, что JSON, который я получаю, является правильным. Далее я хочу сохранить эти данные в хэш-карте и вытащить ее один за другим в соответствии с требованиями.

public ProgressDialog pDialognew; static JSONParser jParser = new JSONParser(); ArrayList<HashMap<String, String>> allValueList; class SearchData extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); pDialognew = new ProgressDialog(Activity.this); pDialognew.setMessage("Loading. Please wait..."); pDialognew.setIndeterminate(false); pDialognew.setCancelable(true); pDialognew.show(); } @Override protected String doInBackground(String... params) { runOnUiThread(new Runnable() { @Override public void run() { int success; try { List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("match",pName)); JSONObject json = jParser.makeHttpRequest(GlobalServerLocation.url_pol, "GET", params); success = json.getInt("success"); if (success == 1) { JSONArray productObj = json.getJSONArray("object"); // JSON Array Log.i("val", productObj.toString()); // Correct JSON total = productObj.length(); // Correct number of rows Log.i("Len", String.valueOf(total)); for (int j = 0; j < productObj.length(); j++) { JSONObject productnew = productObj.getJSONObject(j); String LS = productnew.getString(TAG_LS); String CN = productnew.getString(TAG_CN); String SN = productnew.getString(TAG_SN); String PN = productnew.getString(TAG_PN); HashMap<String, String> map = new HashMap<String, String>(); map.put(TAG_LS, LS); map.put(TAG_CN, CN); map.put(TAG_SN, SN); map.put(TAG_PN, PN); allValueList.add(map); } } else { Log.i("Error", " Some Error from Php Script"); } } catch (JSONException e) { Log.i("Error", e.toString()); } } }); return null; } @Override protected void onPostExecute(String file_url) { pDialognew.dismiss(); // Line 113 } } 

 08-23 17:17:33.449: E/AndroidRuntime(31930): FATAL EXCEPTION: main 08-23 17:17:33.449: E/AndroidRuntime(31930): java.lang.NullPointerException 08-23 17:17:33.449: E/AndroidRuntime(31930): at my.india.our.app$SearchData$1.run(app.java:113) 08-23 17:17:33.449: E/AndroidRuntime(31930): at android.os.Handler.handleCallback(Handler.java:587) 08-23 17:17:33.449: E/AndroidRuntime(31930): at android.os.Handler.dispatchMessage(Handler.java:92) 08-23 17:17:33.449: E/AndroidRuntime(31930): at android.os.Looper.loop(Looper.java:123) 08-23 17:17:33.449: E/AndroidRuntime(31930): at android.app.ActivityThread.main(ActivityThread.java:3729) 08-23 17:17:33.449: E/AndroidRuntime(31930): at java.lang.reflect.Method.invokeNative(Native Method) 08-23 17:17:33.449: E/AndroidRuntime(31930): at java.lang.reflect.Method.invoke(Method.java:507) 08-23 17:17:33.449: E/AndroidRuntime(31930): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874) 08-23 17:17:33.449: E/AndroidRuntime(31930): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632) 08-23 17:17:33.449: E/AndroidRuntime(31930): at dalvik.system.NativeStart.main(Native Method) 

Если требуется какая-либо другая часть кода, дайте мне знать.

Обычно AsyncTask используется как новый поток для выполнения тяжелых операций без блокировки основного потока пользовательского интерфейса. Но вы использовали код, который я упоминал ниже внутри doInBackground() AsyncTask, который снова сделает процесс выполняемым в основном потоке (особенно в Мобильные телефоны с более высокой версией), блокируя его. Поэтому лучше удалите следующие строки и попробуйте запустить его.

 runOnUiThread(new Runnable() { @Override public void run() { } }; 

AsyncTask имеет несколько частей: метод doInBackground, который фактически работает в отдельном потоке и метод onPostExecute, который работает в потоке пользовательского интерфейса. Цель onPostExecute заключается в публикации результатов (таких как обновление иерархии представлений или установка текста в текстовом представлении), которые должны выполняться в потоке пользовательского интерфейса. Он также может публиковать обновления. Чтобы все это работало правильно, необходимо создать AsyncTask и вызвать метод выполнения в потоке пользовательского интерфейса.

Вы не должны вызывать действия пользовательского интерфейса из doInBackground – это приведет к сбою вашего приложения.

Прежде всего, переместите объявление pDialognew в свой класс SearchData .

Во-вторых, как отметил Хари, избавиться от материала runOnUiThread . Ваш doInBackground() должен выглядеть примерно так:

 protected String doInBackground(String... params) { try { List<NameValuePair> params = new ArrayList<NameValuePair>(); // ... rest of your code } catch (JSONException e) { Log.i("Error", e.toString()); } return null; } 

В-третьих, в вашем onPostExecute() убедитесь, что pDialognew не является нулевым (хотя я не знаю, как это может быть здесь null):

 if (pDialognew != null) pDialognew.dismiss();