![](/img/trans.png)
[英]android.content.res.resources notfoundexception $android.content.res.resources notfoundexception $ string resource id #0x1
[英]Android: android.content.res.Resources$NotFoundException: String resource ID #0x5
当我运行我的应用程序时,我从标题中得到异常。 它的作用是它有一个包含 Hangman 游戏文字的 .txt 文件,我认为在访问该文件时会抛出异常。 我的文件 cuvinte.txt 位于 /assets/。 这是我的代码(我跳过了 layout/xml 部分,效果很好):
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);
}
function newGame() 在按下新游戏按钮时和活动开始时在 onCreate() function 中被调用。
(只是假设,异常堆栈跟踪的信息较少)
我认为,这一行, incercari.setText(valIncercari);
抛出异常,因为valIncercari
是int
所以应该是
incercari.setText(valIncercari+"");
或者
incercari.setText(Integer.toString(valIncercari));
只是想指出可能引发此错误的另一个原因是,如果您为应用程序的一个翻译定义了字符串资源,但未提供默认字符串资源。
正如您在下面看到的,我有一个西班牙语字符串“get_started”的字符串资源。 它仍然可以在代码中引用,但如果手机不是西班牙语,它将在调用getString()
时没有资源加载和崩溃。
值-es/strings.xml
<string name="get_started">SIGUIENTE</string>
参考资源
textView.setText(getString(R.string.get_started)
日志猫:
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)
防止这种情况很简单,只要确保在values/strings.xml
始终有一个默认的字符串资源,这样如果手机使用另一种语言,它就会始终有一个可以回退的资源。
值/字符串.xml
<string name="get_started">Get Started</string>
值-en/strings.xml
<string name="get_started">Get Started</string>
值-es/strings.xml
<string name="get_started">Siguiente</string>
值-de/strings.xml
<string name="get_started">Ioslegen</string>
可能导致此异常的另一种情况是使用 DataBinding,即当您在布局中使用类似的内容时
<?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>
请注意,我使用的变量是一个整数,我将它分配给 TextView 的文本字段。 由于 TextView 已经有一个带有setText(int)
签名的方法,它将使用此方法而不是使用setText(String)
并转换值。 因此 TextView 将您的输入数字视为显然无效的资源值。
解决方案是将您的 int 值转换为这样的字符串
android:text="@{String.valueOf(model.someIntegerVariable)}"
此问题主要是由于setText()
方法中的错误引起的
解决方案很简单,将您的Integer
数值转换为string
类型作为
textview.setText(Integer.toString(integer_value));
有时发生这种情况是因为不喜欢任何来源,例如如果我想从适配器将文本设置为文本视图,那么我应该使用
textView.setText(""+name);
如果你写这样的东西
textView.setText(name);
这将不起作用,有时我们没有从 string.xml 文件中找到资源,然后就会发生这种类型的错误。
使用 DataBinding 并使用 drawable 文件夹中的资源为EditText
设置背景会导致异常。
<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" />
解决方案
我只是将背景从android:background="@drawable/rectangle"
更改为android:background="@null"
清理并重建项目。
有时我们在 dimen 或任何其他资源文件夹中添加资源,我们忘记添加 dp。
<dimen name="exercise_value">4</dimen>
例如,我面临这个问题是因为我忘记在我的值中添加 dp 。
然后我把它改成了
<dimen name="exercise_value">4dp</dimen> <br>
繁荣。 错误消失了。
为了解决它,我不得不更换:
Toast.makeText(this, my_int_var, Toast.LENGTH_SHORT).show();
有了这个:
Toast.makeText(this, String.valueOf(my_int_var), Toast.LENGTH_SHORT).show();
您正在为文本字段分配一个数值。 您必须将数值转换为字符串:
String.valueOf(variable)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.