Я не могу понять, что не так, на моем устройстве приложение работает красиво, но иногда в журнале (пользователи приложений, сеансы, сбои ... отслеживание через некоторую службу) я вижу крах приложения (NullPointerException), Тост не может быть запущен, поскольку переменная активности равна нулю.Иногда фрагмент теряет активность
Линия 45 (метод populateCats() генерирует исключение NullPointerException)
package package.name;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.util.ArrayList;
public class CatsList extends ListFragment implements OnTaskCompleted {
Document doc;
MainActivity activity;
ArrayList<Cat> cats;
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cat cat = cats.get(position);
//SOME CODE
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new GetData(activity, this, false).execute(Jsoup.connect(MainActivity.url));
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = (MainActivity) activity;
}
public void populateCats(){
if(doc == null)
{
Toast.makeText(activity, "Error....", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(activity, "Success....", Toast.LENGTH_SHORT).show();
//SOME CODE
}
}
Вход:
java.lang.NullPointerException
at android.widget.Toast.<init>(Toast.java:98)
at android.widget.Toast.makeText(Toast.java:254)
at PACKAGE_NAME.CatsList.populateCats(CatsList.java:64)
at PACKAGE_NAME.CatsList.taskCompleted(CatsList.java:92)
at PACKAGE_NAME.GetData.onPostExecute(GetData.java:61)
at PACKAGE_NAME.GetData.onPostExecute(GetData.java:12)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)
AndroidManifect.xml также Android, содержа-: configChanges = "keyboardHidden | ориентация |" Размер экрана
Попытайтесь перейти от переменной activity к getActivity() в тостах. У вас переменная activity не установлена правильно ... Можно ли использовать справочную информацию о действии, которую вы получаете из onAttach (Activity activity)? Например: this.activity = активность по вышеупомянутому методу? – user1086500
ПОЧЕМУ? onAttach метод вызова перед заполнениемCats() и там я сохраню ссылку на активность. p.s. Я попробовал этот метод также – IceJOKER
Попробуйте: this.activity = getActivity() в onActivityCreated (Bundle). См. Http://developer.android.com/reference/android/app/Fragment.html#onActivityCreated(android.os.Bundle) – user1086500