我正在编写待办事项应用程序,我想在我创建的“添加/编辑”对话框中显示DatePickerDialog和TimePickerDialog,当我运行应用程序时,它会停止并提供以下日志:
P.S .: 给出该例外的一行是: txtDialogDate.setOnClickListener(new View.OnClickListener(){
E / AndroidRuntime:致命异常:主要 处理:com.sano.tamer.todo,PID:2971 java.lang.RuntimeException:无法启动活动ComponentInfo {com.sano.tamer.todo / com.sano.tamer.todo.Tasks}: 显示java.lang.NullPointerException 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:136) 在android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) 引起:java.lang.NullPointerException at com.sano.tamer.todo.Tasks.onCreate(Tasks.java:136) 在android.app.Activity.performCreate(Activity.java:5231) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:136) 在android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)应用程序终止。
课程代码:
package com.sano.tamer.todo;
import android.os.Bundle;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.TextView;
import java.text.DateFormat;
import java.util.Calendar;
import android.app.Dialog;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.widget.EditText;
public class Tasks extends AppCompatActivity {
//----- Declaring variables -----
public RecyclerView Recycler;
public CardView cdvTasks;
public TextView txtTaskTitle, txtTaskDescription, txtTaskDate, txtTaskTime, txtDialogDate, txtDialogTime;
public EditText etDialogTitle, etDialogDescription;
public Animation AnimMoveLeft, AnimMoveRight;
public Dialog AddEdit, Help, TaskDateDialog, TaskTimeDialog;
public String TaskTitle, TaskDescription;
public String TaskDate;
public String TaskTime;
public Button btnSaveTask, btnCancel, btnOK, btnSaveDate, btnSaveTime;
public CheckBox chbDoNotShow;
public SharedPreferences ToDoSettings;
public SharedPreferences.Editor SettingsEditor;
public boolean DoNotShow;
public Intent Settings;
DateFormat TaskDateFormat = DateFormat.getDateInstance();
DateFormat TaskTimeFormat = DateFormat.getTimeInstance();
Calendar TaskCalendar = Calendar.getInstance();
DatePickerDialog.OnDateSetListener DateListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
TaskCalendar.set(Calendar.YEAR, year);
TaskCalendar.set(Calendar.MONTH, monthOfYear);
TaskCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
}
};
TimePickerDialog.OnTimeSetListener TimeListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
TaskCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
TaskCalendar.set(Calendar.MINUTE, minute);
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tasks);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
//----- Add new task -----
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AddEditTask("Add new task");
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
//----- Set ActionBar icon -----
getSupportActionBar().setIcon(R.drawable.ic_assignment_turned_in_white_24dp);
//----- Initializing variables -----
Recycler = new RecyclerView(getApplicationContext());
cdvTasks = (CardView) findViewById(R.id.cdvTaskList);
txtTaskTitle = (TextView) findViewById(R.id.txtTitle);
txtTaskDescription = (TextView) findViewById(R.id.txtDescription);
txtTaskDate = (TextView) findViewById(R.id.txtDate);
txtTaskTime = (TextView) findViewById(R.id.txtTime);
txtDialogDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new DatePickerDialog(Tasks.this,
DateListener,
TaskCalendar.get(Calendar.YEAR),
TaskCalendar.get(Calendar.MONTH),
TaskCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
txtDialogTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new TimePickerDialog(Tasks.this,
TimeListener,
TaskCalendar.get(Calendar.HOUR_OF_DAY),
TaskCalendar.get(Calendar.MINUTE),
true).show();
}
});
}
//----- Add / Edit task dialog -----
public void AddEditTask(final String DialogTitle) {
//----- Setting dialog -----
AddEdit = new Dialog(this);
AddEdit.setContentView(R.layout.add_edit_dialog);
AddEdit.setTitle(DialogTitle);
AddEdit.setCancelable(false);
//----- Initializing variables -----
btnSaveTask = (Button) AddEdit.findViewById(R.id.btnSaveTask);
btnCancel = (Button) AddEdit.findViewById(R.id.btnCancel);
etDialogTitle = (EditText) AddEdit.findViewById(R.id.etTitle);
etDialogDescription = (EditText) AddEdit.findViewById(R.id.etDescription);
txtDialogDate = (TextView) AddEdit.findViewById(R.id.txtDate);
txtDialogTime = (TextView) findViewById(R.id.txtTime1);
if (DialogTitle == "Edit task") {
//----- Assign task info to variables -----
TaskTitle = String.valueOf(txtTaskTitle.getText());
TaskDescription = String.valueOf(txtTaskDescription.getText());
TaskDate = String.valueOf(txtTaskDate.getText());
TaskTime = String.valueOf(txtTaskTime.getText());
//----- Display task info in Edit dialog -----
etDialogTitle.setText(TaskTitle);
etDialogDescription.setText(TaskDescription);
txtDialogDate.setText(String.valueOf(TaskDate));
txtDialogTime.setText(TaskTime);
}
//----- Show Add / Edit dialog -----
AddEdit.show();
//----- Save the task -----
btnSaveTask.setOnClickListener(new View.OnClickListener() {
// @TargetApi(Build.VERSION_CODES.M)
@Override
public void onClick(View view) {
//----- Saving task parameters -----
TaskTitle = String.valueOf(etDialogTitle.getText());
TaskDescription = String.valueOf(etDialogDescription.getText());
// TaskTime = String.valueOf(tpkTaskTime.getHour());
//----- Display task info in task list -----
AddEdit.dismiss();
DisplayTask();
//----- Displaying the task -----
cdvTasks.setVisibility(View.VISIBLE);
AnimationMoveLeft();
}
});
//----- Cancel the Add / Edit dialog -----
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AddEdit.dismiss();
}
});
}
}
答案 0 :(得分:3)
您需要先将其初始化:
txtDialogDate = (TextView) AddEdit.findViewById(R.id.txtDate);
之后才能使用它
txtDialogDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {