172

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

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

4

9 回答 9

594

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

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

所以应该是

incercari.setText(valIncercari+"");

或者

incercari.setText(Integer.toString(valIncercari));
于 2012-06-25T12:40:40.680 回答
18

可能导致此异常的另一种情况是使用 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)and 转换值。因此,TextView 将您的输入数字视为显然无效的资源值。

解决方案是将您的 int 值转换为这样的字符串

android:text="@{String.valueOf(model.someIntegerVariable)}"
于 2016-06-17T15:54:01.847 回答
17

只是想指出可能引发此错误的另一个原因是,如果您为应用程序的一个翻译定义了字符串资源,但没有提供默认字符串资源。

问题示例:

正如您在下面看到的,我有一个西班牙字符串“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>
于 2015-06-11T19:20:38.993 回答
10

这个问题主要是由于setText()方法错误引起的

解决方案很简单Integer,通过将string类型转换为

textview.setText(Integer.toString(integer_value));
于 2018-01-20T15:52:18.190 回答
1

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

 textView.setText(""+name);

如果你写类似

 textView.setText(name);

这将不起作用,有时我们无法从 string.xml 文件中找到资源,然后会发生这种类型的错误。

于 2018-09-30T10:47:43.513 回答
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"

清理并重建项目。

于 2019-07-27T17:01:46.597 回答
0

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

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

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

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

繁荣。错误消失了。

于 2021-05-27T07:13:12.000 回答
0

为了解决它,我不得不更换:

Toast.makeText(this, my_int_var, Toast.LENGTH_SHORT).show();

有了这个:

Toast.makeText(this, String.valueOf(my_int_var), Toast.LENGTH_SHORT).show();
于 2022-03-05T02:57:43.550 回答
-1

您正在为文本字段分配一个数值。您必须将数值转换为字符串:

String.valueOf(variable)
于 2020-01-31T12:51:02.047 回答