Reputation: 83
I am trying to create an app. When testing it, whenever I try to press a button, the app on the phone says, "Unfortunately, [application name] has stopped."
On logcat, a message appears:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.inspiron.firstapplication, PID: 6746
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.inspiron.firstapplication/com.example.inspiron.firstapplication.Text}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2321)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2507)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5692)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:68)
at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:190)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:512)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:184)
at com.example.inspiron.firstapplication.Text.<init>(Text.java:17)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2312)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2507)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5692)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
My XML looks like this:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="English:"
android:id="@+id/LanguageTranslatedFrom"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:textSize="20dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/TextBar"
android:layout_below="@+id/LanguageTranslatedFrom"
android:layout_toEndOf="@+id/LanguageTranslatedFrom"
android:hint="PUT IN what you want to translate..." />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Spanish:"
android:id="@+id/LanguageTranslatedTo"
android:layout_centerVertical="true"
android:layout_alignParentStart="true"
android:textSize="20dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
android:id="@+id/ConfirmationButton"
android:layout_below="@+id/TextBar"
android:layout_alignParentEnd="true"
android:background="#61ff00" />
<ImageButton
android:layout_width="50dp"
android:layout_height="100dp"
android:id="@+id/TextIcon"
android:src="@drawable/keyboard"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/LanguageTranslatedTo"
android:layout_alignParentEnd="true" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ViaVoiceButton"
android:layout_below="@+id/LanguageTranslatedTo"
android:layout_alignParentStart="true"
android:src="@drawable/microphone"
android:layout_toStartOf="@+id/Result" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="What the output is..."
android:id="@+id/Result"
android:layout_below="@+id/TextIcon"
android:layout_toEndOf="@+id/LanguageTranslatedTo"
android:textSize="18dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Retry"
android:id="@+id/Retryit"
android:layout_below="@+id/ConfirmationButton"
android:layout_alignParentEnd="true"
android:background="#61ff00" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BACK"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_toStartOf="@+id/Result"
android:background="#ff0000" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/LanguagePicker"
android:layout_above="@+id/TextBar"
android:layout_toEndOf="@+id/Result" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/LanguageTranslatedTo"
android:layout_centerHorizontal="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView2"
android:layout_gravity="left|top" />
</FrameLayout>
Finally, my java looks like this:
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
public class Text extends AppCompatActivity {
final Context context = this;
Button button = (Button) findViewById(R.id.ConfirmationButton);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_wall);
Spinner spinner = (Spinner) findViewById(R.id.LanguagePicker);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.language, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.alertdialog, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
alertDialogBuilder.setView(promptsView);
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
Spinner spinner = (Spinner) findViewById(R.id.LanguagePicker);
String text = spinner.getSelectedItem().toString();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
}
}
Upvotes: 0
Views: 1032
Reputation: 5351
Move the button initialization in the onCreate method. You can't do it before this method because the view is not rendered and the items are not ready. Change the Java code like the following:
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
public class Text extends AppCompatActivity {
Context context;
Button button;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_wall);
Spinner spinner = (Spinner) findViewById(R.id.LanguagePicker);
button = (Button) findViewById(R.id.ConfirmationButton);
context = this; // why this? why using context when you have this?
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.language, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.alertdialog, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
alertDialogBuilder.setView(promptsView);
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
Spinner spinner = (Spinner) findViewById(R.id.LanguagePicker);
String text = spinner.getSelectedItem().toString();
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
}
}
In addiction check if your activity is present in the manifest; if not, post the full manifest please.
Upvotes: 3