web-dev-qa-db-fra.com

android.content.res.Resources $ NotFoundException: exception fatale d'ID de ressource chaîne dans Main

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
57
EricAnthony

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.

170
A--C
tv.setText( a1 + " ");

Cela résoudra votre problème.

8
mehmoodnisar125

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));
6

Autre solution possible:

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