首页 文章

我的应用程序给出了NullPointerException [重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在编写待办事项应用程序,我想在我创建的“添加/编辑”对话框中显示DatePickerDialog和TimePickerDialog,当我运行应用程序时,它会停止并提供以下日志:

P.S . :给出该例外的一行是: txtDialogDate.setOnClickListener(new View.OnClickListener() {

E / AndroidRuntime:FATAL EXCEPTION:main进程:com.sano.tamer.todo,PID:2971 java.lang.RuntimeException:无法启动活动ComponentInfo {com.sano.tamer.todo / com.sano.tamer.todo . 任务}:android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)的android.app.ActivityThread.access $ 800(ActivityThread . )的java.lang.NullPointerException . java:135)在android.app.A.运行时,Android.O.Roper.loop(Looper.java:136)上的android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) )在com.的java.lang.reflect.Method.invoke(Method.java:515)的java.lang.reflect.Method.invokeNative(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5017)上 . android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)at dalvik.system.NativeStart.main(Native Method)通过:java位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)的android.app.Activity.performCreate(Activity.java:5231)的com.sano.tamer.todo.Tasks.onCreate(Tasks.java:136)上的.lang.NullPointerException :1087)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)android.app.ActivityThread.access $ 800(ActivityThread.java:135)at at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)在android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:136)android.app .ActivityThread.main(ActivityThread.java:5017)位于com.android.internal.os的java.lang.reflect.Method.invoke(Method.java:515)的java.lang.reflect.Method.invokeNative(Native Method) .ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)at dalvik.system.NativeStart.main(Native Method)应用程序终止 .

The class code:

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();
            }
        });
    }

}

1 回答

  • 3

    您需要先将其初始化:

    txtDialogDate = (TextView) AddEdit.findViewById(R.id.txtDate);
    

    在你可以使用它之前

    txtDialogDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    

相关问题