resource not found error android string file

error - Android: android.content.res.Resources $ NotFoundException: String resource ID#0x5



error string resource id android (5)

Obtengo la excepción del título cuando ejecuto mi aplicación. Lo que hace es que tiene un archivo .txt con palabras para un juego Hangman y creo que la excepción se produce al acceder al archivo. Mi archivo, cuvinte.txt se encuentra en / assets /. Aquí está mi código (salté la parte de diseño / xml, que funciona bien):

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); }

La función newGame () se llama cuando se presiona el nuevo botón de juego y al comienzo de la actividad, en la función onCreate ().


(Asunción simple, menos información de la pila de excepción)

Creo que esta línea, incercari.setText(valIncercari); lanza Exception porque valIncercari es int

Entonces debería ser,

incercari.setText(valIncercari+"");

O

incercari.setText(Integer.toString(valIncercari));


A veces también debe insertar valores / strings.xml


Este problema ocurre principalmente debido al error en el método setText ()

La solución es simple, ponga su valor entero convirtiendo en tipo de cadena como

textview.setText (Integer.toString (integer_value));


Otro escenario que puede causar esta excepción es con DataBinding, es decir, cuando usa algo como esto en su diseño

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="model" type="point.to.your.model"/> </data> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@{model.someIntegerVariable}"/> </layout>

Tenga en cuenta que la variable que estoy usando es un Entero y la estoy asignando al campo de texto de la Vista de texto. Como TextView ya tiene un método con la firma de setText(int) usará este método en lugar de usar setText(String) y emitir el valor. Por lo tanto, TextView piensa en su número de entrada como un valor de recurso que obviamente no es válido.

La solución es convertir el valor int en una cadena como esta

android:text="@{String.valueOf(model.someIntegerVariable)}"


Solo quería señalar otro motivo por el que se puede generar este error si definió un recurso de cadena para una traducción de su aplicación, pero no proporcionó un recurso de cadena predeterminado.

Ejemplo del problema:

Como puede ver a continuación, tenía un recurso de cadena para una cadena española "get_started". Todavía se puede hacer referencia en el código, pero si el teléfono no está en español, no tendrá ningún recurso para cargar y bloquearse al llamar a getString() .

values-es / strings.xml

<string name="get_started">SIGUIENTE</string>

Referencia al recurso

textView.setText(getString(R.string.get_started)

Logcat:

06-11 11:46:37.835 7007-7007/? E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.app.test PID: 7007 android.content.res.Resources$NotFoundException: String resource ID #0x7f0700fd at android.content.res.Resources.getText(Resources.java:299) at android.content.res.Resources.getString(Resources.java:385) at com.juvomobileinc.tigousa.ui.signin.SignInFragment$4.onClick(SignInFragment.java:188) at android.view.View.performClick(View.java:4780) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Solución al problema

Evitar esto es bastante simple, solo asegúrate de tener siempre un recurso de cadena por defecto en values/strings.xml modo que si el teléfono está en otro idioma siempre tendrá un recurso al que recurrir.

values ​​/ strings.xml

<string name="get_started">Get Started</string>

values-en / strings.xml

<string name="get_started">Get Started</string>

values-es / strings.xml

<string name="get_started">Siguiente</string>

values-de / strings.xml

<string name="get_started">Ioslegen</string>