AsyncTask onPostExecute дает сбой (сообщает nullpointerexecption), когда я пытаюсь использовать значение, полученное от doInBackground, для обновления SharedPreferences.

Мой дескриптор вызывающей активности: private DashboardActivity<?> callerActivity; без <?>, на который он жалуется. Есть несколько способов: 1) обновить SP в onPostExecute как:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(callerActivity);
prefs.edit().putInt("lastrecord", intRec ).commit();

Я также вызвал метод в callerActivity как:

callerActivity.storeLastInsertedRecord(intRec);

Все ошибки одинаковые, на этих строках обнаружено nullpointerexection.

Что я делаю не так? Этот ответ Android - общие настройки, установленные в AsyncTask onPostExecute () не всегда устанавливается? от @denisdrew - самый близкий, но он вылетает в том же месте, когда я пытаюсь создать экземпляр намерения:

Intent myIntent = new Intent(callerActivity.getApplicationContext(), SharedPrefsHelperActivity.class);

Или

Intent myIntent = new Intent(callerActivity.getBaseContext(), SharedPrefsHelperActivity.class);

Что я делаю не так? Я знаю, что значение, которое я пытаюсь передать, не равно нулю (intRec).

0
sAguinaga 6 Апр 2013 в 23:50
Почему DashboardActivity является универсальным?
 – 
Raghav Sood
6 Апр 2013 в 23:52
Отчасти потому, что я не знаю, что делаю, и из вариантов, предложенных Eclipse, я выбрал этот общий. Другие классы AsyncTask, которые взаимодействуют с моим mysql через json, не жалуются, когда я оставляю его как DashboardActivity callerActivity;
 – 
sAguinaga
8 Апр 2013 в 00:40

1 ответ

Лучший ответ

Таким образом, проблема, скорее всего, связана с контекстом, который назначен для NULL . Я предлагаю вам передать переменную контекста через конструктор AsyncTask e.q

private Context c;

public MyTask(Context c) {
   this.c = c;
}

И назовите это так:

new MyTask(YourCallerActivity.this).execute();


Примечание. Я недавно работал над аналогичной проблемой (сохранение SharedPreferences в onPostExecute), и все работало нормально, так как я передал контекст через конструктор.

0
Simon Dorociak 7 Апр 2013 в 00:01
Технически это предложение работает. Строго говоря, в этом случае оказывается, что b / c callerActivity фактически имеет форму DashboardActivity , где спектр относится к представлению поверхности, определенному в layout.xml. Если я воспользуюсь предложенным выше предложением, одна из вещей, которые я пытаюсь сделать, - это записать в удаленную базу данных с помощью моей асинтаксической задачи, поэтому, пока она работает, данные, которые я пишу в базу данных, не вставляются.
 – 
sAguinaga
9 Апр 2013 в 10:48
Поэтому мне пришлось отказаться от предложения по этой причине. В другом месте во время вызова diff на удаленный сервер (в diff. Asynctask) я извлекаю данные, которые я хочу сохранить в общих предпочтениях, и это отлично работает, b / c callerActivity в этом случае не относится к ClassActivity .
 – 
sAguinaga
9 Апр 2013 в 10:49