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 ().
(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));
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.
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)
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>
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)}"
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));
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.
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.