Wątek przeniesiony 2020-04-04 00:09 z Java przez cerrato.

Crash aplikacji

0

Cześć,
Pisze apke w javie na androida na zaliczenie. Podczas kompilacji pojawiają mi się 3 warningi, które powodują crasowanie się apki. Jak się ich pozbyć? Jestem totalnym laikiem z javy. Z góry dziękuję za pomoc.

warning: [options] source value 7 is obsolete and will be removed in a future release
warning: [options] target value 7 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
3 warnings

2

Jest bardzo nikła szansa że z powodu ostrzeżeń aplikacja Ci crashuje się a jeszcze mniejsza z powodu tych ostrzeżeń które dałeś w wątku. Bez kodu cieżko Ci coś doradzić - możesz podesłać link do repo oraz ścieżkę reprodukcji.

2
  1. W MainActivity masz metodę:
    public void onClickTxt(View view, ListAdapter adapter) {
        Intent k = new Intent(MainActivity.this, ListActivity.class);
        list.setAdapter(adapter);
	}

Metoda ta teoretycznie jest podpięta pod onClick w pliku activity_main jako android:onClick="onClickTxt". Dlaczego teoretycznie? Ponieważ żeby podpiąć metodę w android:onClick xmlu musi ona mieć inną listę parametrów:
```
public void onClickTxt(View view) {}


Dodatkowo pole list nie jest zainicjowane ani nie jest w ogóle potrzebne w tej aktywności - jak rozumiem z kontekstu w onClickTxt chciałbyś otworzyć inna aktywność, robi się to poprzez wywołanie 

startActivity( Intent );

W Twoim przypadku będzie to:

public void onClickTxt(View view) {
Intent k = new Intent(MainActivity.this, ListActivity.class);
startActivity(k);
}

2. 
Po zmianie powyższego kodu aplikacja będzie nadal się crashować po przyciśnięciu na w/w przycisk. Problemem jest to że w widoku aktywności R.layout.activity_list nie masz osadzonego / dodanego widgetu listy. Wystarczy że w ConstraintLayout umieścisz 

<ListView
android:id="@id/listViev"
android:layout_width="match_parent"
android:layout_height="match_parent" />


Po tych zmianach u mnie działa.
Jeśli mógłbym doradzić dalsze usprawnienia:
1. Nie używa się już listview - warto zmienić na RecyclerView
2. Jak przełączysz na logcata na belce na dole, wybierzesz swój emulator oraz ustawisz na Error w widoku to będziesz mógł prościej śledzić problemy.

Powodzenia!
1

Odpowiem Ci nie w komentarzu a w odpowiedzi:

  1. utworzenie obiektu ListView i pobranie go z widoku -> to jest zrealizowane w ListActivity -> Done

  2. zdefiniowanie listy zawierającej obiekty reprezentujące studentów -> Jeśli miałbym podejść do tego ściśle to tutaj zamiast podawać String jak Ty to robisz warto byłoby zrobić prostą klasę z danymi dla studentów np (pseudokod) : class Student {name:String, username:String, index: Int} dlaczego? Odpowiedź poniżej.

  3. utworzenie adaptera -> Twój adapter jest to standardowy adapter z androida, używa się go bardzo rzadko. Według mnie warto tutaj zrobić (czy należy tak zrobić to warto spytać prowadzącego) swój własny, niestandardowy adapter -> dzięki temu wartość merytoryczna całego zadania byłaby znacznie większa, dowiedziałbyś się na prostym przykładzie jak robić taki adapter dodatkowo miałbyś pole do rozmowy z prowadzącym dlaczego taki adapter się stostuje.

  4. ustawienia adaptera na listę -> Teoretycznie jest to zrobione ale Twoim obiektem jest typ Adapter, przez to musisz rzutować na ListAdapter podczas ustawienia adaptera -> zamień obiekt private Adapter adapter na ListAdapter, dzięki temu nie będziesz musiał nić rzutować.

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