私は小さな乱数を取得してテキストビューでユーザーに表示する簡単なプログラムを作成しようとしています。最終的に生成する乱数を取得した後(私は思う)、プログラムは実行するたびに致命的な例外をスローします。コードにエラーはありませんが、私は完全な初心者であり、学ぶために簡単に始めています。数時間後、私は助けを求めることに提出しました。私は、乱数のスニペットが間違った領域にあることをほぼ確信しています。どこに置くべきかわかりません。私が試みたすべての場所で同じエラーがスローされます。
これは.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
移動する
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
オーバーロードメソッドを強制します。
A.setText(a1)を実行しようとしました。 a1はint値ですが、setText()には文字列値が必要です。このため、String.valueOf(a1)を使用して、a1の値をintではなくStringとしてa.setText()に渡す必要があります。
a.setText(String.valueOf(a1))
それが私の問題の正確な解決策でした。
tv.setText( a1 + " ");
これで問題が解決します。
Int値をTextView
に設定しようとしているため、この問題が発生しています。これを解決するには、1つのオプションを試してください
オプション1:
tv.setText(no+"");
オプション2:
tv.setText(String.valueOf(no));
その他の可能な解決策:
tv.setText(Integer.toString(a1)); // where a1 - int value
これは、DataBindingで常に発生する可能性があります。空の文字列を追加するなど、バインディングにロジックを追加しないようにしてください。独自のカスタムアダプタを作成し、それを複数回使用できます。
@BindingAdapter("numericText")
fun numericText(textView: TextView, value: Number?) {
value?.let {
textView.text = value.toString()
}
}
<TextView app:numericText="@{list.size()}" .../>