J'ai essayé de créer un programme simple qui récupère un petit nombre aléatoire et l'affiche à l'utilisateur dans une vue en mode texte. Après avoir enfin obtenu le nombre aléatoire à générer (je pense), le programme lève une exception fatale à chaque fois que je cours. Aucune erreur de code, mais je suis un débutant complet et je commence simple pour que je puisse apprendre. Après les heures, j'ai soumis à demander de l'aide. Je suis presque certain que mon extrait pour les nombres aléatoires se trouve dans la mauvaise zone, je ne sais pas trop où le mettre. Partout où j'ai essayé jette la même erreur.
C'est le .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);}
}
Le 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
Bouge toi
Random pp = new Random();
int a1 = pp.nextInt(10);
TextView tv = (TextView)findViewById(R.id.tv);
tv.setText(a1);
À l'intérieur de onCreate()
, et remplacez tv.setText(a1);
par 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));
}
Premier problème: findViewById()
a été appelé avant onCreate()
, ce qui entraînerait un NPE.
Deuxième problème: Passer un int directement à un TextView appelle la méthode surchargée qui recherche une ressource String (à partir de R.string
). Par conséquent, nous souhaitons utiliser String.valueOf()
pour forcer la méthode surchargée String
.
tv.setText( a1 + " ");
Cela résoudra votre problème.
Vous essayez de définir la valeur int sur TextView
pour que vous rencontriez ce problème . Pour résoudre ce problème, essayez ci-dessous une option
option 1:
tv.setText(no+"");
Option 2:
tv.setText(String.valueOf(no));
Autre solution possible:
tv.setText(Integer.toString(a1)); // where a1 - int value