web-dev-qa-db-fra.com

Android: Android.content.res.Resources $ NotFoundException: ID de ressource de chaîne # 0x5

Je reçois l'exception du titre lorsque je lance mon application. Qu'est-ce qu'il fait, c'est qu'il a un fichier .txt avec des mots pour un jeu Hangman et je pense que l'exception est levée lors de l'accès au fichier. Mon fichier, cuvinte.txt se trouve dans/assets /. Voici mon code (j'ai ignoré la partie layout/xml, qui fonctionne très 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 fonction newGame () est appelée à la fois lorsque vous appuyez sur le bouton du nouveau jeu et au début de l'activité, dans la fonction onCreate ().

118
FloIancu

(Juste hypothèse, moins d'infos sur la pile d'exception)

Je pense que cette ligne, incercari.setText(valIncercari); jette Exception Parce que valIncercari est int

Donc ça devrait être,

incercari.setText(valIncercari+"");

Ou

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

Je voulais simplement signaler une autre raison pour laquelle cette erreur peut être générée, si vous avez défini une ressource chaîne pour une traduction de votre application sans fournir de ressource chaîne par défaut. 

Exemple de problème:

Comme vous pouvez le voir ci-dessous, j'avais une ressource chaîne pour une chaîne espagnole "get_started". Il peut toujours être référencé dans le code, mais si le téléphone n'est pas en espagnol, il n'aura aucune ressource à charger et se plantera lors de l'appel de getString()

values-es/strings.xml

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

Référence à la 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)

Solution au problème

Empêcher cela est assez simple, assurez-vous simplement que vous avez toujours une ressource chaîne par défaut dans values/strings.xml afin que, si le téléphone est dans une autre langue, il aura toujours une ressource à laquelle vous pourrez vous fier. 

values ​​/ strings.xml

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

values-fr/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>
11

Un autre scénario pouvant provoquer cette exception concerne DataBinding, C'est à ce moment-là que vous utilisez quelque chose comme ceci dans votre présentation.

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

Notez que la variable que j'utilise est un entier et que je l'assigne au champ de texte de TextView. Comme TextView a déjà une méthode avec la signature setText(int), elle utilisera cette méthode au lieu d’utiliser la fonction setText(String) et convertira la valeur. Ainsi, le TextView considère votre numéro d'entrée comme une valeur de ressource qui n'est évidemment pas valide. 

La solution est de convertir votre valeur int en chaîne comme ceci

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

Ce problème survient principalement en raison de l'erreur dans la méthode setText()

La solution est simple, mettez votre valeur Integer en convertissant string typeas 

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

L'utilisation de DataBinding et la définition de l'arrière-plan dans le texte edittext avec les ressources du dossier pouvant être dessiné sont à l'origine de l'exception.

<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"/>

Solution

Je viens de changer le fond de Android:background="@drawable/rectangle" en Android:background="@null"

Nettoyer et reconstruire le projet.

0
A.N.T

Parfois, cela est dû à ne trouver aucune source, comme si je veux définir un texte dans un textview de l'adaptateur, alors je devrais utiliser 

 textView.setText(""+name);

Si vous écrivez quelque chose comme 

 textView.setText(name);

cela ne fonctionnera pas et parfois nous ne trouvons pas la ressource dans le fichier string.xml, alors ce type d'erreur se produit.

0
pavel