java.lang.IllegalStateException: Fragment nicht an Aktivität angehängt
Ich bin selten immer diese Fehlermeldung, während eine API-Aufruf.
java.lang.IllegalStateException: Fragment not attached to Activity
Ich habe versucht, den code innerhalb isAdded()
Methode, um zu überprüfen, ob das fragment ist derzeit Hinzugefügt, um seine Aktivität aber trotzdem habe ich nur selten bekommt diesen Fehler. Ich kann das nicht verstehen warum bin ich noch immer diesen Fehler. Wie kann ich es verhindern?
Zeigt seine Fehler auf der Strecke-
cameraInfo.setId(getResources().getString(R.string.camera_id));
Unten ist der Beispiel-api-Aufruf, den ich mache.
SAPI.getInfo(getActivity(),
new APIResponseListener() {
@Override
public void onResponse(Object response) {
cameraInfo = new SInfo();
if(isAdded()) {
cameraInfo.setId(getResources().getString(R.string.camera_id));
cameraInfo.setName(getResources().getString(R.string.camera_name));
cameraInfo.setColor(getResources().getString(R.string.camera_color));
cameraInfo.setEnabled(true);
}
}
@Override
public void onError(VolleyError error) {
mProgressDialog.setVisibility(View.GONE);
if (error instanceof NoConnectionError) {
String errormsg = getResources().getString(R.string.no_internet_error_msg);
Toast.makeText(getActivity(), errormsg, Toast.LENGTH_LONG).show();
}
}
});
InformationsquelleAutor der Frage Bhuvnesh Varma | 2015-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler passiert, durch die kombinierte Wirkung von zwei Faktoren:
onResponse()
oderonError()
(die Arbeit auf den Haupt-thread), ohne zu wissen, ob dieActivity
noch im Vordergrund steht oder nicht. Wenn dieActivity
gegangen ist (der Benutzer navigiert anderswo)getActivity()
null zurück.Response
ist, ausgedrückt als eine anonyme innere Klasse, die implizit hat einen starken Bezug zur äußerenActivity
Klasse. Dies führt zu einer klassischen memory-leak.Um dieses problem zu lösen, sollten Sie immer tun:
und auch, verwenden Sie
isAdded()
imonError()
Methode:InformationsquelleAutor der Antwort Y.S.
Fragment-Lebenszyklus ist sehr Komplex und voller Fehler, versuchen Sie, hinzufügen:
InformationsquelleAutor der Antwort Miroslav Michalec
Fand ich Sehr Einfache Lösung isAdded() Methode, die eine der fragment-Methode, um festzustellen, ob das aktuelle fragment angebracht ist, um seine Aktivität oder nicht.
das können wir wie überall in der fragment-Klasse wie:
InformationsquelleAutor der Antwort Dharmesh Baldha
ich spät, aber kann jemand helfen .....
Die beste Lösung dafür ist die Erstellung eines globalen application-Klasse-Instanz und rufen Sie es in dem bestimmten Abschnitt, wo Sie Ihre Tätigkeit ist nicht angebracht
wie es weiter unten beschrieben
Hier ist die application-Klasse
InformationsquelleAutor der Antwort md gouse
Ausnahme: java.lang.IllegalStateException: Fragment
DeadlineListFragment{ad2ef970} nicht an Aktivität
Kategorie: Lifecycle
Beschreibung: Bei zeitaufwändigen Vorgangs im hintergrund-thread(e.g, AsyncTask), ein neues Fragment wurde in der Zwischenzeit, und abgelöst wurde, um die Aktivität vor dem hintergrund-thread beendet. Der code im UI-thread(z.B.,onPostExecute) fordert ein losgelöstes Fragment, werfen solche Ausnahme.
Lösung:
Abbrechen der hintergrund-thread bei Pause oder anhalten der
Fragment
Verwenden isAdded (), um zu überprüfen, ob das fragment angebracht ist
und dann getResources() von activity.
InformationsquelleAutor der Antwort Rahil Ali
Dieser Fehler kann passieren, wenn Sie instanziieren ein fragment, das irgendwie und kann nicht instanziiert werden:
In meinem Fall, die ich getroffen habe, als ich versuchte zu verwenden:
InformationsquelleAutor der Antwort sagits
Nahm ich den folgenden Ansatz für den Umgang mit diesem Problem. Erstellt eine neue Klasse, die als wrapper für die Aktivität Methoden wie diese
Jetzt wo ich brauche, um den Zugriff auf Ressourcen von Fragmenten oder Aktivitäten, anstatt direkt den Aufruf der Methode, die ich verwenden diese Klasse. Im Fall der Aktivität
context
ist nichtnull
gibt es den Wert des Vermögenswerts und bei dercontext
null ist, geht es einen default-Wert (der ist auch angegeben, dass der Aufrufer der Funktion).Wichtig Das ist keine Lösung, dies ist ein effektiver Weg, wo Sie kann damit umgehen crash anmutig. Würden Sie wollen, fügen Sie einige Protokolle in den Fällen, wo Sie bekommen Aktivität Instanz als null und versuchen, dass zu beheben, wenn möglich.
InformationsquelleAutor der Antwort Ezio
diese passieren, wenn das fragment nicht ein Kontext ,so die getActivity () - Methode null zurück.
überprüfen Sie ob der Kontext, bevor Sie es erhalten, oder wenn die Aktivität nicht mehr vorhanden ist . Kontext im fragment.onCreate und nach api Antwort in der Regel, falls das problem
InformationsquelleAutor der Antwort dexian fan
Manchmal diese Ausnahme wird verursacht durch einen bug in der Bibliothek unterstützt die Umsetzung. Vor kurzem hatte ich ein downgrade von 26.1.0 zu 25.4.0, um es loszuwerden.
InformationsquelleAutor der Antwort Bord81
wenn Sie mit fragment
InformationsquelleAutor der Antwort Ashwin H
Dieses Problem tritt auf, wenn Sie rufen Sie ein Kontext, der nicht verfügbar ist, oder null, wenn Sie es nennen. Dies kann eine situation, wenn Sie anrufen, Haupt-activity-thread-Kontext für einen hintergrund-thread, oder hintergrund-thread-Kontext auf der main activity-thread.
Habe ich zum Beispiel meine aktualisierten gemeinsamen Vorliebe string wie folgt aus.
Genannt und finish() nach. Nun, was es tut, ist, dass, wie Begehen läuft auf dem main thread und Stoppt alle anderen Asynchronen commits kommen Sie, bis es abgeschlossen ist. So seinem Kontext lebt, bis das schreiben beendet ist. Daher vorherigen Kontext Leben , der den Fehler verursacht.
So stellen Sie sicher, dass Sie Ihren code nochmals überprüft, wenn es einen code mit dieser Kontext-Ausgabe.
InformationsquelleAutor der Antwort Prashant Paliwal
In Fragment verwenden
isAdded()
Es gibt true zurück, wenn das fragment wird derzeit an Aktivität.
Wenn Sie wollen, überprüfen Sie das innere der Aktivität
Hoffe, es wird jemand helfen
InformationsquelleAutor der Antwort Prateek218