I get the following error message when running my basic application. The application consists of a button called button1 and a textView called topLeft.
07-01 15:33:02.754: D/AndroidRuntime(2334): Shutting down VM 07-01 15:33:02.754: W/dalvikvm(2334): threadid=1: thread exiting with
uncaught exception (group=0x40a13300) 07-01 15:33:02.984:
E/AndroidRuntime(2334): FATAL EXCEPTION: main 07-01 15:33:02.984:
E/AndroidRuntime(2334): java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.MainActivity}:
java.lang.NullPointerException 07-01 15:33:02.984:
E/AndroidRuntime(2334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.access$600(ActivityThread.java:130) 07-01
15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.os.Handler.dispatchMessage(Handler.java:99) 07-01
15:33:02.984: E/AndroidRuntime(2334): at android.os.Looper.loop(Looper.java:137) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at android.app.ActivityThread.main(ActivityThread.java:4745) 07-01
15:33:02.984: E/AndroidRuntime(2334): at java.lang.reflect.Method.invokeNative(Native Method) 07-01
15:33:02.984: E/AndroidRuntime(2334): at java.lang.reflect.Method.invoke(Method.java:511) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-01 15:33:02.984: E/AndroidRuntime(2334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 07-01
15:33:02.984: E/AndroidRuntime(2334): at dalvik.system.NativeStart.main(Native Method) 07-01 15:33:02.984:
E/AndroidRuntime(2334): Caused by: java.lang.NullPointerException
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.Activity.findViewById(Activity.java:1825) 07-01
15:33:02.984: E/AndroidRuntime(2334): at com.example.myfirstapp.MainActivity.<init>(MainActivity.java:28) 07-01
15:33:02.984: E/AndroidRuntime(2334): at java.lang.Class.newInstanceImpl(Native Method) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at java.lang.Class.newInstance(Class.java:1319) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
07-01 15:33:02.984: E/AndroidRuntime(2334): ... 11 more
When attempting to use the findViewById, this error comes up referring to line 28.
The program looks like the following:
package com.example.myfirstapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
int a = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
Button button1 = (Button) findViewById(R.id.button1);
TextView topLeft = (TextView) findViewById(R.id.textView2);
// button1.setOnClickListener( this );
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
What does this mean? Why is my code having trouble doing something along the lines of referring to the R.java file?
R.java does have
public static final class id {
public static final int button1=0x7f080001;
public static final int menu_settings=0x7f080003;
public static final int textView1=0x7f080000;
public static final int textView2=0x7f080002;
Thanks in advance.
FindViewById(Int32)Finds a view that was identified by the android:id XML attribute that was processed in #onCreate .
findViewById is the method that finds the View by the ID it is given. So findViewById(R. id. myName) finds the View with name 'myName'.
Kotlin Android Extensions is a great way to avoid writing findViewById in the activity or fragment. Simply, add the kotlin-android-extensions plugin to the module level build. gradle file.
This is super useful, because it makes all of the code we wrote initially unnecessary. The way it works is basically it calls findViewById itself and it creates a cache of views it references any time you want to access that view again.
You're calling findViewById
as part of your field definition, at which point the layout isn't inflated (that happens when you call setContentView
). findViewById
isn't finding the view, so the reference is being set to null
.
Moving your findViewById
calls inside of onCreate
, after calling setContentView
should fix it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With