Java 启动意图时出现空指针异常
我是一个android的初学者,正在尝试自己制作一个简单的应用程序。我试着发布尽可能多的代码细节 当我在Java 启动意图时出现空指针异常,java,android,nullpointerexception,Java,Android,Nullpointerexception,我是一个android的初学者,正在尝试自己制作一个简单的应用程序。我试着发布尽可能多的代码细节 当我在MainActivity.java中单击ShowTask按钮时,它不会启动新的Intent并抛出NullPointerException。如果我删除了setOnClickListener以及TaskList.java中与其相关的代码,新的意图将启动,但按钮将不起作用。我已经张贴了日志,以使它容易 MainActivity.java package com.budthapa.unsavedcha
MainActivity.java
中单击ShowTask按钮时,它不会启动新的Intent并抛出NullPointerException
。如果我删除了setOnClickListener
以及TaskList.java
中与其相关的代码,新的意图将启动,但按钮将不起作用。我已经张贴了日志,以使它容易
MainActivity.java
package com.budthapa.unsavedchanges;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private Button addTask;
private Button cancel;
private EditText editText;
private Button showTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
addTask.setOnClickListener(this);
showTask.setOnClickListener(this);
cancel.setOnClickListener(this);
}
private void initialize() {
addTask = (Button) findViewById(R.id.btnAddTask);
showTask = (Button) findViewById(R.id.btnShowTask);
cancel = (Button) findViewById(R.id.btnCancel);
editText = (EditText) findViewById(R.id.editText);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View arg0) {
String text = editText.getText().toString();
// cancel button works only if textbox is not empty
switch (arg0.getId()) {
case R.id.btnAddTask:
// call method that add tasks
if (text.isEmpty()) {
// if no content in the textbox
Toast showMessage = Toast.makeText(MainActivity.this,
"Please fill some task to add", Toast.LENGTH_LONG);
showMessage.setGravity(Gravity.CENTER, 0, 0);
showMessage.show();
} else {
addTask();
}
break;
case R.id.btnShowTask:
// It will start a new activity to show the list of task
Intent showTaskList = new Intent(MainActivity.this, TaskList.class);
startActivity(showTaskList);
break;
case R.id.btnCancel:
// call this method when user creates cancel button
if (!text.isEmpty()) {
// there is some content in the text box
unSavedDialog();
break;
}
// you can call this code instead, but will not so any warning
// finish();
exitAppDialog(); // this code will show alert dialog box
}
}
private void addTask() {
// add new item to the array list
String taskName = editText.getText().toString();
ArrayList<String> taskArr = new ArrayList<String>();
taskArr.add(taskName);
// notify user that new task is added
Toast addNewTask = Toast.makeText(MainActivity.this,
"New Task Added successfully", Toast.LENGTH_SHORT);
addNewTask.setGravity(Gravity.CENTER, 0, 0);
addNewTask.show();
}
private void exitAppDialog() {
// this method will start when user clicks cancel button
AlertDialog.Builder exitDialog = new AlertDialog.Builder(this);
exitDialog.setTitle(R.string.exitApp);
exitDialog.setMessage(R.string.exitMessage);
exitDialog.setCancelable(false);
exitDialog.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// exit the app
finish();
}
});
exitDialog.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
// cancel and return to the app
dialog.cancel();
}
});
AlertDialog alert = exitDialog.create();
alert.show();
}
private void unSavedDialog() {
// this dialog will appear when user press cancel button
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(R.string.alertTitle);
alert.setMessage(R.string.alertMessage);
alert.setCancelable(false);
alert.setNegativeButton("Add Task",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// save the task and exit
addTask();
}
});
alert.setPositiveButton("Discard Changes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// finish the activity
finish();
}
});
alert.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// cancel the dialog box and return to the view
arg0.cancel();
}
});
AlertDialog dialog = alert.create();
dialog.show();
}
}
package com.budthapa.unsavedchanges;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class TaskList extends Activity implements OnClickListener {
private Button addNewTask;
private Button cancel;
private TextView taskList;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.task_list);
initialize();
addNewTask.setOnClickListener(this);
cancel.setOnClickListener(this);
}
private void initialize() {
// TODO Auto-generated method stub
addNewTask = (Button) findViewById(R.id.btnAddTask);
cancel = (Button) findViewById(R.id.btnCancel);
taskList = (TextView) findViewById(R.id.textView);
}
public void showTask() {
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.btnCancel:
AlertDialog.Builder alert = new AlertDialog.Builder(TaskList.this);
alert.setTitle("Do you want to exit?");
alert.setCancelable(false);
alert.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
finish();
}
});
alert.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
arg0.cancel();
}
});
AlertDialog dialog = alert.create();
dialog.show();
break;
case R.id.btnAddTask:
Intent showMain = new Intent(TaskList.this, MainActivity.class);
startActivity(showMain);
finish(); // finish the current running activity and go back to main
// Activity
break;
}
}
}
试试这个
有两个相同的基站
addNewTask = (Button) findViewById(R.id.btnAddTask);
cancel = (Button) findViewById(R.id.btnCancel);
任务列表类
task_list.xml没有btnAddTask
这就是为什么会出现此错误
您需要为不同活动的不同名称提供xml btn id
case R.id.btnCancel:
// call this method when user creates cancel button
if (!text.isEmpty()) {
unSavedDialog();
break;
}
exitAppDialog(); // this code will show alert dialog box
break; <------- MISSING......
}
}
案例R.id.btnCancel:
//当用户创建“取消”按钮时调用此方法
如果(!text.isEmpty()){
未保存的对话框();
打破
}
exitAppDialog();//此代码将显示警报对话框
打破请发布日志。@Selvin E/AndroidRuntime(11060):致命异常:main E/AndroidRuntime(11060):java.lang.RuntimeException:无法启动活动组件信息{com.budthapa.unsavedchanges/com.budthapa.unsavedchanges.TaskList}:java.lang.NullPointerException E/AndroidRuntime(11060):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)E/AndroidRuntime(11060):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)E/AndroidRuntime(11060):在android.app.ActivityThread.access$600(ActivityThread.java:141)这个“case”是“switch()上的最后一个“case”,所以这不会有效果,但是,如果这些ID不存在,那就不会导致编译器错误?@angel_navarro btnAddTask已经存在于activity_main.xml中,那么btnAddTask不能将该名称命名为other activity.xml,如果它给出,它将使NPE.ah ok@Tamilan,than用于您的澄清;-)感谢它的帮助。实际上,我在想是否可以使用相同的按钮。@budthapa不,我们需要为不同的活动使用不同的id名称。这是一个链接,我们为这样的布局提供了不同的名称。。