Po uruchomieniu aplikacji pojawia się wyjątek od tytułu. To, co robi, to plik .txt ze słowami dla gry w Wisielca i myślę, że wyjątek jest zgłaszany podczas uzyskiwania dostępu do pliku. Mój plik cuvinte.txt znajduje się w / asset /. Oto mój kod (pominąłem część układu / xml, która działa dobrze):
public void onCreate() {
// all the onCreate() stuff, then this:
try {
AssetManager am = this.getAssets();
InputStream is = am.open("cuvinte.txt");
InputStreamReader inputStreamReader = new InputStreamReader(is);
BufferedReader b = new BufferedReader(inputStreamReader);
String rand;
while((rand=b.readLine())!=null){
cuvinte.add(rand);
}
} catch (IOException e) {
Toast.makeText(this, "No words file", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
newGame(newG);
}
public void newGame(View view){
Random rand = new Random();
String stringCuvant = cuvinte.get(rand.nextInt(cuvinte.size()));
cuvant.setText("");
System.out.println(stringCuvant);
for(int i = 0; i< stringCuvant.length(); i++){
cuvant.append("_ ");
}
incercari.setText(valIncercari);
}
Funkcja newGame () jest wywoływana zarówno po naciśnięciu przycisku nowej gry, jak i na początku działania, w funkcji onCreate ().
setText()
funkcji.Odpowiedzi:
(Tylko założenie, mniej informacji o śledzeniu stosu wyjątków)
Myślę, że ta linia
incercari.setText(valIncercari);
rzuca Wyjątek, ponieważvalIncercari
jestint
Tak powinno być
Lub
źródło
Integer.toString(valIncercari);
setText(int)
służy również do pobierania zasobu ciągu według identyfikatora. W systemie Android wszystkie identyfikatory zasobów mająint
wartość.Chciałem tylko wskazać inny powód, dla którego ten błąd może zostać zgłoszony, jeśli zdefiniowałeś zasób ciągu dla jednego tłumaczenia swojej aplikacji, ale nie podałeś domyślnego zasobu ciągu.
Przykład problemu:
Jak widać poniżej, miałem zasób ciągu dla hiszpańskiego ciągu znaków „get_started”. Nadal można się do niego odwoływać w kodzie, ale jeśli telefon nie jest w języku hiszpańskim, nie będzie miał zasobów do załadowania i awarii podczas dzwonienia
getString()
.wartości-es / strings.xml
Odniesienie do zasobu
Logcat:
Rozwiązanie problemu
Zapobieganie temu jest dość proste, po prostu upewnij się, że zawsze masz domyślny zasób ciągu
values/strings.xml
, aby jeśli telefon był w innym języku, zawsze miał zasób, do którego można wrócić.wartości / strings.xml
wartości-en / strings.xml
wartości-es / strings.xml
wartości-de / strings.xml
źródło
Innym scenariuszem, który może spowodować ten wyjątek, jest wiązanie danych, czyli użycie czegoś takiego w układzie
Zauważ, że zmienna, której używam, jest liczbą całkowitą i przypisuję ją do pola tekstowego TextView. Ponieważ TextView ma już metodę z podpisem
setText(int)
, użyje tej metody zamiast używaniasetText(String)
i rzutowania wartości. Dlatego TextView traktuje numer wejściowy jako wartość zasobu, która oczywiście nie jest poprawna.Rozwiązaniem jest rzutowanie wartości int na łańcuch w ten sposób
źródło
Build
->Clean Project
w Android Studio ponownie wygenerować klasy powiązań danych.Ten problem występuje głównie z powodu błędu w
setText()
metodzieRozwiązanie jest proste, wpisz swoją
Integer
wartość, konwertując nastring
typ asźródło
Czasami zdarzyło się to, ponieważ nie lubiłem żadnego źródła, jak jeśli chcę ustawić tekst w widoku tekstu z adaptera, powinienem użyć
Jeśli napiszesz coś w stylu
to nie zadziała i czasami nie znajdziemy zasobu z pliku string.xml, wtedy wystąpi tego typu błąd.
źródło
Użycie DataBinding i ustawienie tła dla edittext z zasobami z folderu do rysowania powoduje wyjątek.
Rozwiązanie
Po prostu zmieniam tło z
android:background="@drawable/rectangle"
naandroid:background="@null"
Wyczyść i odbuduj projekt.
źródło
Przypisujesz wartość liczbową do pola tekstowego. Musisz przekonwertować wartość liczbową na ciąg z:
źródło