konto usunięte

Temat: Problem nowicjusza

Cześć. Właśnie zaczynam przygodę z androidem i napotkałem na problem którego nie mogę przeskoczyć. W książce, z której korzystam pisana jest aplikacja. Wszystkie przykłady które przepisywałem działały dobrze, aż do momentu utworzenia nowej aktywności. Autor książki wspomniał, że taki błąd się pojawi i każe dopisać aktywność do AndroidManifest.xml po czym problem ma zostać rozwiązany.

Jednak gdy dopisałem aktywność problem nadal pozostał ("Aplikacja została zatrzymana"). Szperałem trochę w internecie i dowiedziałem się, że prawdopodobnie brakuje jakichś bibliotek w projekcie Eclipse. Próbowałem dodawać różne jednak problem nie znikał.

Wiem, że może to forum nie jest przeznaczone do takich celów ale brak mi już sił, a wiem, że przesiadują tu specjaliści.

logcat:

09-24 15:41:16.359: E/AndroidRuntime(5735): FATAL EXCEPTION: main
09-24 15:41:16.359: E/AndroidRuntime(5735): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.przyklad.sudoku/org.przyklad.sudoku.MainActivity}: java.lang.NullPointerException
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.ActivityThread.access$600(ActivityThread.java:127)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.os.Handler.dispatchMessage(Handler.java:99)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.os.Looper.loop(Looper.java:137)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.ActivityThread.main(ActivityThread.java:4441)
09-24 15:41:16.359: E/AndroidRuntime(5735): at java.lang.reflect.Method.invokeNative(Native Method)
09-24 15:41:16.359: E/AndroidRuntime(5735): at java.lang.reflect.Method.invoke(Method.java:511)
09-24 15:41:16.359: E/AndroidRuntime(5735): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-24 15:41:16.359: E/AndroidRuntime(5735): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-24 15:41:16.359: E/AndroidRuntime(5735): at dalvik.system.NativeStart.main(Native Method)
09-24 15:41:16.359: E/AndroidRuntime(5735): Caused by: java.lang.NullPointerException
09-24 15:41:16.359: E/AndroidRuntime(5735): at org.przyklad.sudoku.MainActivity.onCreate(MainActivity.java:19)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.Activity.performCreate(Activity.java:4465)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-24 15:41:16.359: E/AndroidRuntime(5735): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
09-24 15:41:16.359: E/AndroidRuntime(5735): ... 11 more

W kodzie źródłowym aplikacji nie powinno być błędu bo przepisywałem z książki ale jeśli ktoś będzie chciał rzucić okiem to mogę wstawić. Dodam jeszcze, że mam najnowszą wtyczkę (20.0.3) do Eclipse. Z góry dzięki za pomoc
Mateusz M.

Mateusz M. Student, Akademia
Górniczo-Hutnicza
im. Stanisława
Staszi...

Temat: Problem nowicjusza

w jakiś sposób się odwołujesz do wartości, która nie istnieje (NullPointer). Zobacz czy na pewno wszystko dobrze przepisałeś, czy przesyłasz do nowej aktywności wszystko co w niej odczytujesz.

Spróbuj usunąć kawałek kodu i zobacz czy się uruchomi, w ten sposób znajdziej wadliwy fragment :)

Temat: Problem nowicjusza

Kliknij sobie w logcacie na ten błąd - drugi od góry - NullPointerException i powinno Cię przenieść do miejsca w kodzie, w którym ten błąd występuje. Tak, jak napisał kolega wyżej, odwołujesz się do czegoś, czego nie ma. Może to być nieutworzony obiekt, widok, zmienna, do której nie przypisano żadnej wartości, etc. Możesz wkleić ten kawałek z błędem, to być może będzie widać, o co konkretnie chodzi. Może np. zapomniałeś ustawić layoutu?
Oskar Jarczyk

Oskar Jarczyk Artificial
intelligence expert
@ Deep.BI, PhD in
Social I...

Temat: Problem nowicjusza

Wklej na jakieś pastebin cały kod z MainActivity.java to rozwiążemy raz dwa.
Michał Kąkol

Michał Kąkol Rozwiązuję problemy,
przenoszę firmy do
internetu.

Temat: Problem nowicjusza

MainActivity linijka nr 19.
forum jest do zadawania takich pytań, z drugiej strony tak szybko się poddajesz? :)

Temat: Problem nowicjusza

Do nauki polecam kursy na thenewboston.org, 200 filmików w języku angielskim ale przystępnie do tego http://stackoverflow.com/ i dużo można się nauczyć :) Przeglądałem polskie tytuły z androida i moim subiektywnym zdaniem są zwyczajnie słabe...

konto usunięte

Temat: Problem nowicjusza

Dziękuję za odpowiedzi. Rozwiązałem problem ale sam dokładnie nie wiem jak. Stworzyłem nowy projekt zaznaczając opcje "Mark this project as a library". Stworzyłem wszystkie pliki od nowa i działa. Nie wiem gdzie był błąd, czy właśnie w niezaznaczeniu tej opcji czy może faktycznie w literówce. Ale mimo wszystko wielkie dzięki za zaangażowanie i uważam, że temat jest do zamknięcia. Pozdrawiam
Michał Kąkol

Michał Kąkol Rozwiązuję problemy,
przenoszę firmy do
internetu.

Temat: Problem nowicjusza

jak nie znajdziesz swego błedu, to jak się powtórzy będziesz lekko mówiąc w "kropce"

programowanie w dużej mierze polega na rozwiązywaniu problemów i poznawaniu odpowiedzi, tak żeby przy kolejnym spotkaniu z problemem mięc bazę możliwych racjonalnych rozwiązań

jak chcesz zamknąć temat Twoja sprawa, następnym razem gdy powtorzy Ci się "java.lang.NullPointerException" będziesz robił nowy projekt? haha to życzę Ci udanego życia programisty, bo ja takich błędów łapie dziennie kilka(dziesiąt) w zależności od tego co akurat robię :P

pokaż kod, najlepiej link do jakiegoś repo (git/svn) i po chwili ktoś powie Ci jaki był błąd, samemu natomiast powinieneś zdebugować sobie apke i poznać przyczynę problemu

ps: projekt jako biblioteka to całkowicie inny typ projektu, gdy projekt udostępnia na zewnątrz jakąś funkcjonalność, np. ZXing barcode project (http://code.google.com/p/zxing), więc raczej gdzieś miałeś literówke, błąd logiczny, błąd w widokach albo jakiś inny szajs, który napewno się przytrafi ponownie, ale już masz gotowe rozwiązanie w postaci -> New Project (mark as library)...

konto usunięte

Temat: Problem nowicjusza

Obstawiam, że była to literówka.

Co do opcji mark as a library. Gdy nie mam jej zaznaczonej nie tworzy mi pliku R.java. Stosowałem prawie wszystkie rozwiązania ze stackoverfolw.com jakie są podawane do przywrócenia przez Eclipse tego pliku ale żadne z nich nie działało. Po zaznaczeniu tej opcji plik pojawia się automatycznie przy tworzeniu projektu.

Niestety nie mogę teraz kodu z problemem po zastąpiłem go nowym (tym razem kopiowałem z plików dołączonych do książki). Na tej podstawie twierdzę, że zrobiłem literówkę, być może w nazwie widoku bo ta linijka w której był błąd dotyczyła nasłuchiwania kliknięcia w przycisk menu.

Jestem dopiero początkujący w Androidzie więc proszę o wyrozumiałość:) Wiem z doświadczenia, że najlepiej uczyć się na błędach bo tworzyłem już swoje projekty w innych językach:)

Temat: Problem nowicjusza


Obrazek
Michał Kąkol

Michał Kąkol Rozwiązuję problemy,
przenoszę firmy do
internetu.

Temat: Problem nowicjusza

to Ci rzucę hinta, nie tworzy pliku R gdy są błędy w resource (res, assets), wystarczy wyklikac na dole zakładkę Problems (obok Console, Log) i tam można poznać po typach problemów, że błędnie masz plik R

druga możliwość to błędnie zaimportowany plik R, czasami sie coś sypie w eclipsie, i trzeba robić kilkukrotnego clean'a + refresha, żeby załapał, a w plikach java sprawdzić czy przypadkiem nie includujemy com.android.R zamiast swojego pliku R (nazewnictwo w zależności od projektu), wtedy należy usunąc linijkę, sprawdzic czy zbudowały się resource'y i jeszcze raz kliknąć ctlr + shift + o -> jak znów doda ten badziew to rzecz jasna błędny zapis w jakimś xmlu lub błędna nazwa jakiegos resourca (np. nazwa grafiki)

albo zrozumiesz znajdziesz i zniszczysz błąd, albo błąd zrozumie że nie rozumiesz i zniszczy Twoją karierę :P

ps: czemu usunąłeś kod i wkleiłeś na jego miejsce nowy? zawsze, ale to zawsze zapisujesz i nowy robisz inny, to takie zabezpieczenie jakby nowy projekt był w jeszcze większej kropce niż stary, i jak doświadczenie mnie nauczyło bardzo przydatna taktyka :P

ps2: jeszcze bym zapomniał, czasami jak masz błędnie Build Path zrobiony to też sypie się własnie w ten sposób, np brakuje jakieś projektu, z którego korzystasz niby (includowałes), jakiegoś jara itpMichał Kąkol edytował(a) ten post dnia 26.09.12 o godzinie 23:18

Następna dyskusja:

Problem z uruchomieniem AVD




Wyślij zaproszenie do