web-dev-qa-db-ger.com

android.content.res.Resources $ NotFoundException: String-Ressourcen-ID Schwerwiegende Ausnahme in Main

Ich habe versucht, ein einfaches Programm zu erstellen, das eine kleine Zufallszahl abruft und dem Benutzer in einer Textansicht anzeigt. Nachdem ich endlich die Zufallszahl zum Generieren erhalten habe (denke ich), löst das Programm bei jedem Lauf eine schwerwiegende Ausnahme aus. Keine Fehler im Code, aber ich bin ein absoluter Neuling und fange einfach an, damit ich etwas lernen kann. Nach Stunden habe ich mich um Hilfe gebeten. Ich bin fast sicher, dass mein Snippet für Zufallszahlen im falschen Bereich liegt. Ich bin mir einfach nicht sicher, wo ich es platzieren soll. Überall habe ich versucht, den gleichen Fehler zu werfen.

Dies ist die .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);}

    }

Das 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

Bewegung

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

In onCreate() und tv.setText(a1); in tv.setText(String.valueOf(a1)); ändern:

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

}   

Erste Ausgabe: findViewById() wurde vor onCreate() aufgerufen, wodurch eine NPE ausgelöst wurde.

Zweites Problem: Wenn Sie ein int direkt an ein TextView übergeben, wird die überladene Methode aufgerufen, die nach einer String-Ressource (aus R.string) sucht. Daher möchten wir String.valueOf() verwenden, um die überladene String-Methode zu erzwingen.

170
A--C

Sie haben versucht, a.setText (a1) auszuführen. a1 ist ein int-Wert, aber setText () erfordert einen String-Wert. Aus diesem Grund müssen Sie String.valueOf (a1) verwenden, um den Wert von a1 als String und nicht als int an a.setText () zu übergeben. Beispiel:

a.setText(String.valueOf(a1))

das war die genaue Lösung für das Problem mit meinem Fall.

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

Dies wird Ihr Problem lösen.

8
mehmoodnisar125

Sie versuchen, den int-Wert auf TextView zu setzen, damit Sie dieses Problem erhalten ... Um dieses Problem zu lösen, versuchen Sie es mit einer Option

option 1:

tv.setText(no+"");

Option 2:

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

Andere mögliche Lösung:

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

Dies kann immer in DataBinding passieren. Versuchen Sie, keine Logik in Ihre Bindungen einzufügen, einschließlich des Anhängens einer leeren Zeichenfolge. Sie können Ihren eigenen Adapter erstellen und ihn mehrmals verwenden.

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

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

0
Juan Mendez