it-swarm.com.de

Android: Android.content.res.Resources $ NotFoundException: String-Ressourcen-ID # 0x5

Ich bekomme die Ausnahme vom Titel, wenn ich meine App starte. Was es tut, ist eine .txt-Datei mit Wörtern für ein Hangman-Spiel. Ich denke, die Ausnahme wird beim Zugriff auf die Datei ausgelöst. Meine Datei cuvinte.txt befindet sich in/assets /. Hier ist mein Code (ich habe den Layout/XML-Teil übersprungen, was gut funktioniert):

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

Die Funktion newGame () wird sowohl beim Drücken der neuen Spielschaltfläche als auch zu Beginn der Aktivität in der Funktion onCreate () aufgerufen.

118
FloIancu

(Nur Annahme, weniger Informationen zur Ausnahme stacktrace)

Ich denke, diese Zeile, incercari.setText(valIncercari);, wirft Exception Weil valIncercariint ist

So sollte es sein,

incercari.setText(valIncercari+"");

Oder

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

Ich wollte nur auf einen weiteren Grund verweisen, aus dem dieser Fehler ausgelöst werden kann, wenn Sie eine Zeichenfolgenressource für eine Übersetzung Ihrer App definiert haben, jedoch keine Standardzeichenfolgenressource bereitstellen. 

Beispiel für das Problem:

Wie Sie unten sehen können, hatte ich eine String-Ressource für eine spanische Zeichenfolge "get_started". Es kann immer noch im Code referenziert werden, aber wenn das Telefon nicht auf Spanisch ist, hat es keine Ressource, die geladen werden muss, wenn getString() aufgerufen wird. 

Werte-es/strings.xml

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

Verweis auf die Ressource

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)

Lösung für das Problem

Dies zu verhindern, ist ziemlich einfach. Vergewissern Sie sich, dass Sie in values/strings.xml immer eine Standard-String-Ressource haben, sodass das Telefon in einer anderen Sprache immer eine Ressource hat, auf die Sie zurückgreifen können. 

Werte/Zeichenfolgen.xml

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

values-de/strings.xml

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

Werte-es/strings.xml

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

values-de/strings.xml

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

Ein anderes Szenario, das diese Ausnahmebedingung verursachen kann, ist DataBinding Wenn Sie in Ihrem Layout so etwas wie dieses verwenden

<?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>

Beachten Sie, dass die von mir verwendete Variable eine Ganzzahl ist und ich sie dem Textfeld der TextView zuweise. Da das TextView bereits über eine Methode mit der Signatur setText(int) verfügt, wird diese Methode anstelle von setText(String) verwendet und der Wert umgewandelt. Daher betrachtet das TextView Ihre Eingabezahl als einen Ressourcenwert, der offensichtlich nicht gültig ist. 

Die Lösung ist, Ihren int-Wert in eine Zeichenfolge wie folgt umzuwandeln

Android:text="@{String.valueOf(model.someIntegerVariable)}"
7
Kayvan N

Dieses Problem tritt meistens aufgrund des Fehlers in der setText()-Methode auf

Die Lösung ist einfach, setzen Sie Ihren Integer-Wert durch Konvertierung in string-Typ 

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

Die Verwendung von DataBinding und das Festlegen des Hintergrunds für den Edittext mit Ressourcen aus dem Zeichenordner verursacht die Ausnahme.

<EditText
                            Android:background="@drawable/rectangle"
                            Android:imeOptions="flagNoExtractUi"
                            Android:layout_width="match_parent"
                            Android:layout_height="45dp"
                            Android:hint="Enter Your Name"
                            Android:gravity="center"
                            Android:textColorHint="@color/hintColor"
                            Android:singleLine="true"
                            Android:id="@+id/etName"
                            Android:inputType="textCapWords"
                            Android:text="@={viewModel.model.name}"
                            Android:fontFamily="@font/avenir_roman"/>

Lösung

Ich ändere gerade den Hintergrund von Android:background="@drawable/rectangle" zu Android:background="@null"

Bereinigen Sie und erstellen Sie das Projekt neu.

0
A.N.T

Irgendwann geschah dies, weil ich keine Quelle liebte, wie wenn ich einen Text in eine Textansicht vom Adapter setzen möchte, dann sollte ich verwenden 

 textView.setText(""+name);

Wenn du sowas schreibst 

 textView.setText(name);

dies funktioniert nicht und manchmal finden wir die Ressource nicht in der Datei string.xml. Dann tritt dieser Fehlertyp auf.

0
pavel