web-dev-qa-db-ja.com

android.content.res.Resources $ NotFoundException:メインの文字列リソースID致命的な例外

私は小さな乱数を取得してテキストビューでユーザーに表示する簡単なプログラムを作成しようとしています。最終的に生成する乱数を取得した後(私は思う)、プログラムは実行するたびに致命的な例外をスローします。コードにエラーはありませんが、私は完全な初心者であり、学ぶために簡単に始めています。数時間後、私は助けを求めることに提出しました。私は、乱数のスニペットが間違った領域にあることをほぼ確信しています。どこに置くべきかわかりません。私が試みたすべての場所で同じエラーがスローされます。

これは.Javaです

package com.eai.vgp;

import Java.util.Random;

import Android.os.Bundle;
import Android.app.Activity;
import Android.view.Menu;
import Android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;

    }


    Random pp = new Random();
int a1 = pp.nextInt(10);

TextView tv = (TextView)findViewById(R.id.tv);{

tv.setText(a1);}

    }

XML

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
    Android:id="@+id/tv"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerHorizontal="true"
    Android:layout_centerVertical="true" />

</RelativeLayout>

LogCat

03-03 16:34:25.313: I/Process(740): Sending signal. PID: 740 SIG: 9
03-03 16:35:02.212: E/Trace(806): error opening trace file: No such file or directory     (2)
03-03 16:35:02.802: W/ResourceType(806): No package identifier when getting value for     resource number 0x00000001
03-03 16:35:02.813: D/AndroidRuntime(806): Shutting down VM
03-03 16:35:02.813: W/dalvikvm(806): threadid=1: thread exiting with uncaught exception     (group=0x40a13300)
03-03 16:35:02.833: E/AndroidRuntime(806): FATAL EXCEPTION: main
03-03 16:35:02.833: E/AndroidRuntime(806): Java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.eai.vgp/com.eai.vgp.MainActivity}:     Android.content.res.Resources$NotFoundException: String resource ID #0x1
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2059)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2084)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.ActivityThread.access$600(ActivityThread.Java:130)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1195)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.os.Handler.dispatchMessage(Handler.Java:99)
03-03 16:35:02.833: E/AndroidRuntime(806):  at Android.os.Looper.loop(Looper.Java:137)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.ActivityThread.main(ActivityThread.Java:4745)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Java.lang.reflect.Method.invokeNative(Native Method)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Java.lang.reflect.Method.invoke(Method.Java:511)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:786)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
03-03 16:35:02.833: E/AndroidRuntime(806):  at dalvik.system.NativeStart.main(Native     Method)
03-03 16:35:02.833: E/AndroidRuntime(806): Caused by:     Android.content.res.Resources$NotFoundException: String resource ID #0x1
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.content.res.Resources.getText(Resources.Java:229)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.widget.TextView.setText(TextView.Java:3620)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     com.eai.vgp.MainActivity.onCreate(MainActivity.Java:22)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.Activity.performCreate(Activity.Java:5008)
03-03 16:35:02.833: E/AndroidRuntime(806):  at     Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1079)
03-03 16:35:02.833: E/AndroidRuntime(806):      atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2023)
03-03 16:35:02.833: E/AndroidRuntime(806):  ... 11 more
03-03 16:35:05.113: I/Process(806): Sending signal. PID: 806 SIG: 9
60
Eric Anthony

移動する

Random pp = new Random();
int a1 = pp.nextInt(10);
TextView tv = (TextView)findViewById(R.id.tv);
tv.setText(a1);

内部onCreate()に移動し、tv.setText(a1);tv.setText(String.valueOf(a1));に変更します。

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  Random pp = new Random();
  int a1 = pp.nextInt(10);

  TextView tv = (TextView)findViewById(R.id.tv);
  tv.setText(String.valueOf(a1));

}   

最初の問題:findViewById()onCreate()の前に呼び出され、NPEがスローされました。

2番目の問題:intをTextViewに直接渡すと、Stringリソースを検索するオーバーロードメソッドが呼び出されます(R.stringから)。したがって、String.valueOf()を使用してStringオーバーロードメソッドを強制します。

175
A--C

A.setText(a1)を実行しようとしました。 a1はint値ですが、setText()には文字列値が必要です。このため、String.valueOf(a1)を使用して、a1の値をintではなくStringとしてa.setText()に渡す必要があります。

a.setText(String.valueOf(a1))

それが私の問題の正確な解決策でした。

22
Dennis Tieke
tv.setText( a1 + " ");

これで問題が解決します。

8
mehmoodnisar125

Int値をTextViewに設定しようとしているため、この問題が発生しています。これを解決するには、1つのオプションを試してください

オプション1:

tv.setText(no+"");

オプション2:

tv.setText(String.valueOf(no));

その他の可能な解決策:

tv.setText(Integer.toString(a1));  // where a1 - int value
2
V.Y.

これは、DataBindingで常に発生する可能性があります。空の文字列を追加するなど、バインディングにロジックを追加しないようにしてください。独自のカスタムアダプタを作成し、それを複数回使用できます。

@BindingAdapter("numericText")
fun numericText(textView: TextView, value: Number?) {
    value?.let {
        textView.text = value.toString()
    }
}

<TextView app:numericText="@{list.size()}" .../>

0
Juan Mendez