• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w pobraniu danych z poliku strings.xml

Object Storage Arubacloud
0 głosów
143 wizyt
pytanie zadane 17 czerwca 2019 w Android, Swift, Symbian przez matir85 Bywalec (2,410 p.)
edycja 17 czerwca 2019 przez matir85

Witam.

Gdzie robię błąd, że zamiast nazwy zapisanej w pliku string.xml w tablicy wyświetla mi się ciąg cyfr ???

O to moja tablica

public class Workout {

    private String name;
    private String description;

    // tabela
    public static final Workout[] workouts = {
            new Workout(String.valueOf(R.string.rece), String.valueOf(R.string.opis_treningu_rece)),
            new Workout(String.valueOf(R.string.brzuch), String.valueOf(R.string.opis_treningu_brzuch)),
            new Workout(String.valueOf(R.string.nogi),String.valueOf(R.string.opis_treningu_nogi))
    };

    // Konstruktor tabeli
    private Workout(String name, String description){
        this.name = name;
        this.description = description;
    }
    public String getName(){
        return name;
    }
    public String getDescription(){
        return description;
    }
    public String toString(){
        return this.name;
    }
}

 

komentarz 17 czerwca 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Za mało kodu

2 odpowiedzi

+1 głos
odpowiedź 17 czerwca 2019 przez Aisekai Nałogowiec (42,190 p.)
edycja 17 czerwca 2019 przez Aisekai

 

// Konstruktor tabeli

private Workout(String name, String description){ this.name = name; this.description = description; }

Nie, to nie jest konstruktor tabeli - to jest konstruktor obiektu klasy Workout. To, że masz metodę statyczną w klasie Workout, która zwraca tablice nie znaczy, że konstruktor tej klasy to konstruktor tablicy. 

Czy to jest błędem? Nie, ale prawdopodobnie to i nadpisanie metody toString() pokazuje, że gdzieś wywołujesz coś na kształt: 

System.out.println(Workout.workouts())

co wcale nie wywołuje metody toString() Workout, tylko klasy Object, która domyślnie wykorzystuje hashCode do tworzenia toString (stąd te cyfry). 

 getClass().getName() + '@' + Integer.toHexString(hashCode())

Stąd, żeby wypisać zawartość tablicy w miarę normalny sposób (tzn wykorzystując toString() obiektów tablicy) musisz albo wywołać tą metodę na każdym z obiektów ręcznie (np pętlą foreach) albo skorzystać z gotowej metody Arrays.toString(array). 

0 głosów
odpowiedź 18 czerwca 2019 przez KubenQPL Maniak (62,820 p.)

Ponieważ na androidzie stringi ze strings.xml wyciągasz za pomocą metody getString(R.string.jakis_string). Tyle że w klasie Workouts nigdzie nie masz context'u żeby użyć getString. Jeśli potrzebujesz to w takiej formie to najlepiej jakbyś zrobił statyczną metodę inicjalizującą tą tablice:

public static void initializeWorkouts(Context context) {
    workouts = {
        new Workout(context.getString(R.string.rece), context.getString(R.string.cos_tam),
        ...
    }
}

Tylko będziesz musiał usunąć `final` dla `workouts` a zainicjalizować np gdzieś w onCreate Activity czy gdzie to tam tego potrzebujesz

Podobne pytania

+1 głos
2 odpowiedzi 259 wizyt
pytanie zadane 11 maja 2021 w Inne języki przez MateuszSikorski Obywatel (1,070 p.)
+1 głos
1 odpowiedź 216 wizyt
pytanie zadane 31 lipca 2017 w Java przez Spektral Początkujący (410 p.)
0 głosów
2 odpowiedzi 617 wizyt
pytanie zadane 10 sierpnia 2018 w Android, Swift, Symbian przez fipooo Bywalec (2,880 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...