aplikacja się wykrzacza ale nie do końca

0

Mam taki dziwny problem. Piszę sobie program na Androida i tak mam główną aktywności w niej dwa przyciski które otwierają nowe aktywności. Klikam jeden przycisk i otwiera nowe activity. Następnie tam klikam przycisk po czym aplikacja się wykrzacza pojawia się komunikat, że niestety aplikacja została zatrzymana ale zamiast się zamknąć to tylko zamyka tą aktywność i wyświetla tą pierwszą.

0

A logcat w logu mówi ze co się stało?

0

@Shalom
Zastanawia mnie dlaczego aplikacja się nie zamyka całkowicie tylko pokazuje wcześniejsze activity?

05-31 22:03:54.234    2173-2173/eri.testcreator.apptc D/AndroidRuntime﹕ Shutting down VM
05-31 22:03:54.234    2173-2173/eri.testcreator.apptc W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x419bfba8)
05-31 22:03:54.293    2173-2173/eri.testcreator.apptc E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: eri.testcreator.apptc, PID: 2173
    java.lang.NullPointerException
            at eri.testcreator.apptc.SaveActivity.downloadData(SaveActivity.java:96)
            at eri.testcreator.apptc.SaveActivity.access$300(SaveActivity.java:19)
            at eri.testcreator.apptc.SaveActivity$1.onClick(SaveActivity.java:66)
            at android.view.View.performClick(View.java:4438)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5050)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
0

Tak działa Android. Przechodząc z jednej aplikacji do drugiej, jak ta ostatnia się wysypie to system powraca do poprzedniej. Po drodze może sobie również ubić aktywności, które nie są aktualnie widoczne a następnie przywrócić ich stan np gdy użytkownik użyje przycisku "Back". To samo się dzieje u Ciebie, aktywność B się wysypuje więc Android przywraca poprzednią (A). Generalnie trzeba się wgłębić w temat tasków, procesów i zarządzania zasobami przez system by to dokładnie zczaić ;)

0

Widzisz wyjątek - poleciał w tym activity więc tylko ono się wysypało bo działa trochę jak osobny wątek.

0

Zdecydowanie zbyt mało danych podałeś. Stawiam na wyjątek spowodowany wywołaniem funkcji zwrotnej po opuszczeniu aktywności (ale bez dodatkowych danych mogę tylko "gdybać").

0
Shalom napisał(a):

Widzisz wyjątek - poleciał w tym activity więc tylko ono się wysypało bo działa trochę jak osobny wątek.

Activity nie działa jak osobny wątek. Wszystkie Activity są na jednym stosie w wątku głównym.
Podejrzewam, że Twoje Activity (SaveActivity) odpala operację downloadData w osobnym wątku (np. w AsyncTasku). W tej metodzie leci nullPointerException i Activity się zamyka.
Bez kodu możemy sobie tutaj jedynie powróżyć. Wepnij się debuggerem w to miejsce (klasa SaveActivity.java, linia: 96). Zobacz, co konkretnie jest nullem i spróbuj jakoś obsłużyć tę sytuację lub zmodyfikować kod tak, żeby tego nulla nie było.

0

nullPointerException był wywołany próbą dodania elementu do nie zainicjalizowanego obiektu ArrayList. Było to spowodowane brakiem pliku z którego miał być odczytany obiekt i funkcja zwracała null.
Dodałem:

if(arrayList==null)
     arrayList = new ArrayList<DataFile>();

i teraz już działa.

0

Możesz pójść o krok dalej i na dzień dobry inicjalizować tę listę. Np. na początku ciała metody lub jako pole w klasie w zależności od tego, jaka jest struktura Twojego kodu. Wtedy w ogóle nie będziesz musiał robić tego sprawdzania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1