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>