Please have a look at the following code
activity_main.xml
<LinearLayout 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" >
<EditText
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
MainActivity.java
package com.example.textbox;
import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText text = (EditText)findViewById(R.id.text);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text.setOnKeyListener(new TextMaker());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private class TextMaker implements OnKeyListener
{
String str = text.getText().toString();
public boolean onKey(View arg0, int keyCode, KeyEvent event)
{
if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
return true;
}
else
{
return false;
}
}
}
}
When I run this application, I am getting the following error
10-27 19:05:46.487: D/AndroidRuntime(339): Shutting down VM
10-27 19:05:46.487: W/dalvikvm(339): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-27 19:05:46.527: E/AndroidRuntime(339): FATAL EXCEPTION: main
10-27 19:05:46.527: E/AndroidRuntime(339): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.textbox/com.example.textbox.MainActivity}: java.lang.NullPointerException
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.os.Handler.dispatchMessage(Handler.java:99)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.os.Looper.loop(Looper.java:123)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.reflect.Method.invokeNative(Native Method)
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.reflect.Method.invoke(Method.java:507)
10-27 19:05:46.527: E/AndroidRuntime(339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-27 19:05:46.527: E/AndroidRuntime(339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-27 19:05:46.527: E/AndroidRuntime(339): at dalvik.system.NativeStart.main(Native Method)
10-27 19:05:46.527: E/AndroidRuntime(339): Caused by: java.lang.NullPointerException
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.Activity.findViewById(Activity.java:1647)
10-27 19:05:46.527: E/AndroidRuntime(339): at com.example.textbox.MainActivity.<init>(MainActivity.java:15)
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.Class.newInstanceImpl(Native Method)
10-27 19:05:46.527: E/AndroidRuntime(339): at java.lang.Class.newInstance(Class.java:1409)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
10-27 19:05:46.527: E/AndroidRuntime(339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
10-27 19:05:46.527: E/AndroidRuntime(339): ... 11 more
Why is this? Please help!
We need to refer the
EditTextafter specifying which layout we are considering.I think
setContentView()helps you to know which layout we are considering. So try initialising the EditText withfindViewById()after the statementsetContentView().replace
with