Android:android.content.res.Resources $ NotFoundException:字符串资源ID#0x5

时间:2012-06-25 12:38:10

标签: android string file

运行我的应用时,我从标题中获得了异常。它的作用是它有一个带有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);
}

在按下新游戏按钮时和在活动开始时,在onCreate()函数中调用newGame()函数。

8 个答案:

答案 0 :(得分:461)

(只是假设,Exception stacktrace的更少信息)

我认为,这一行incercari.setText(valIncercari);会抛出异常 因为valIncercariint

应该是,

incercari.setText(valIncercari+"");

或者

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

答案 1 :(得分:11)

只是想指出可以引发此错误的另一个原因是,如果您为应用的一个转换定义了字符串资源但未提供默认字符串资源。

问题示例:

如下所示,我有一个西班牙语字符串的字符串资源&#34; get_started&#34;。它仍然可以在代码中引用,但如果手机不是西班牙语,则在调用getString()时无法加载和崩溃。

<强>值-ES / strings.xml中

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

参考资源

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)

问题的解决方案

防止这种情况非常简单,只需确保values/strings.xml中始终有一个默认的字符串资源,这样如果手机使用的是另一种语言,它将始终拥有可以回退的资源。

<强>值/ strings.xml中

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

<强>值烯/ 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>

答案 2 :(得分:9)

可能导致此异常的另一种情况是使用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>

请注意,我使用的变量是一个Integer,我将它分配给TextView的文本字段。由于TextView已经有一个签名为setText(int)的方法,因此它将使用此方法而不是使用setText(String)并转换值。因此,TextView将您的输入编号视为资源值,显然无效。

解决方法是将int值转换为类似

的字符串
android:text="@{String.valueOf(model.someIntegerVariable)}"

答案 3 :(得分:4)

由于setText()方法

中的错误,主要发生此问题

解决方案很简单,只需将Integer值转换为string类型即可 如

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

答案 4 :(得分:0)

有时发生这种情况是由于没有喜欢任何来源,例如,如果我想将文本设置为适配器的文本视图,那么我应该使用

 textView.setText(""+name);

如果您写类似

 textView.setText(name);

这将无法正常工作,有时我们无法从string.xml文件中找到资源,然后会发生此类错误。

答案 5 :(得分:0)

使用DataBinding并将背景与可绘制文件夹中的资源一起设置为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"

清理并重建项目。

答案 6 :(得分:0)

有时我们在 dimen 或任何其他资源文件夹中添加资源,我们忘记添加 dp。

<dimen name="exercise_value">4</dimen>

例如,我遇到这个问题是因为我忘记在我的值中添加 dp。
然后我把它改成了

<dimen name="exercise_value">4dp</dimen> <br>

轰隆隆。错误消失了。

答案 7 :(得分:-1)

您正在为文本字段分配一个数值。您必须使用以下方法将数值转换为字符串:

String.valueOf(variable)