android.content.res.Resources$NotFoundException: String resource ID Fatal Exception in Main

AndroidExceptionRandomTextview

Android Problem Overview


I've been trying to make a simple program that fetches a small random number and displays it to the user in a textview. After finally getting the random number to generate (I think) the program throws a fatal exception whenever I run. No errors in code, but I'm a complete newbie and I am starting simple so that I may learn. After hours I've submitted to asking for help. I'm almost certain that my snippet for random numbers is in the wrong area, I just am not sure where to put it. Everywhere I tried throws the same error.

This is the .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);}
	
	}

The 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

Android Solutions


Solution 1 - Android

Move

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

To inside onCreate(), and change tv.setText(a1); to 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));
  
}   

First issue: findViewById() was called before onCreate(), which would throw an NPE.

Second issue: Passing an int directly to a TextView calls the overloaded method that looks for a String resource (from R.string). Therefore, we want to use String.valueOf() to force the String overloaded method.

Solution 2 - Android

You tried to do a.setText(a1). a1 is an int value, but setText() requires a string value. For this reason you need use String.valueOf(a1) to pass the value of a1 as a String and not as an int to a.setText(), like so:

a.setText(String.valueOf(a1))

that was the exact solution to the problem with my case.

Solution 3 - Android

tv.setText( a1 + " ");

This will resolve your problem.

Solution 4 - Android

You are trying to set int value to TextView so you are getting this issue. To solve this try below one option

option 1:

tv.setText(no+"");

Option2:

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

Solution 5 - Android

Other possible solution:

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

Solution 6 - Android

This always can happen in DataBinding. Try to stay away from adding logic in your bindings, including appending an empty string. You can make your own custom adapter, and use it multiple times.

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

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEric AnthonyView Question on Stackoverflow
Solution 1 - AndroidA--CView Answer on Stackoverflow
Solution 2 - AndroidDennis TiekeView Answer on Stackoverflow
Solution 3 - Androidmehmoodnisar125View Answer on Stackoverflow
Solution 4 - Androidsubrahmanyam boyapatiView Answer on Stackoverflow
Solution 5 - AndroidVishal YadavView Answer on Stackoverflow
Solution 6 - AndroidJuan MendezView Answer on Stackoverflow