【问题标题】:(ArrayAdapter maybe) / / 'java.lang.String java.lang.Object.toString()' on a null object reference(ArrayAdapter 也许) // 'java.lang.String java.lang.Object.toString()' 对空对象引用
【发布时间】:2016-07-28 01:20:26
【问题描述】:

我是初学者,也是我的第一个应用程序。我正在尝试做一个待办事项列表应用程序。现在,我卡住了,找不到我的错误。有人可以帮我解决这个问题吗?

已编辑

asilajandaActivity.java

public class asilajandaActivity extends AppCompatActivity {
private TaskDbHelper mHelper;
private ListView mTaskListView;
private ArrayAdapter<String> mAdapter;
private ArrayAdapter<String> mAdapter2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(R.string.title_activity_asilajanda);
    setContentView(R.layout.activity_asilajanda);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mHelper = new TaskDbHelper(this);
    mTaskListView = (ListView) findViewById(R.id.list_todo);

    updateUI();updateUI2();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {


    switch (item.getItemId()) {
        case R.id.action_add_task:



            final Dialog dialog= new Dialog(this);


            dialog.setContentView(R.layout.dialod_ajanda);
            dialog.setTitle("Etkinlik Ekle");
            final EditText dateEditText=(EditText)dialog.findViewById(R.id.editText);
            final EditText taskEditText =(EditText)dialog.findViewById(R.id.Text);

            Button kaydet= (Button) dialog.findViewById(R.id.button4);
            Button vazgec=(Button) dialog.findViewById(R.id.button5);



            kaydet.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    try {
                        SQLiteDatabase db= mHelper.getWritableDatabase();
                        ContentValues values1 = new ContentValues();
                        String date = String.valueOf(dateEditText.getText());
                        values1.put(TaskContract.TaskEntry.COL_TASK_tar, date);

                        db.insertWithOnConflict(TaskContract.TaskEntry.TABLE, null, values1, SQLiteDatabase.CONFLICT_REPLACE);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                        try {
                            SQLiteDatabase db= mHelper.getWritableDatabase();
                            ContentValues values = new ContentValues();
                            String date = String.valueOf(taskEditText.getText());
                            values.put(TaskContract.TaskEntry.COL_TASK_TITLE, date);

                            db.insertWithOnConflict(TaskContract.TaskEntry.TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE);
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                    db.close();
                    updateUI();updateUI2();
                    dialog.dismiss();

                }

            });

            vazgec.setOnClickListener(new View.OnClickListener(){
                @Override
                 public void onClick(View v){
                    dialog.dismiss();
                }
            });
                    dialog.create();
            dialog.show();

            return true;

        default:
            return super.onOptionsItemSelected(item);
    }

}


public void deleteTask(View view) {
    View parent = (View) view.getParent();
    TextView taskTextView = (TextView) parent.findViewById(R.id.task_title);
    TextView tarihtext =(TextView) parent.findViewById(R.id.tarih_text);
    String task = String.valueOf(taskTextView.getText());
    String date = String.valueOf(tarihtext.getText());
    SQLiteDatabase db = mHelper.getWritableDatabase();
    db.delete(TaskContract.TaskEntry.TABLE,
            TaskContract.TaskEntry.COL_TASK_TITLE + " = ?",
            new String[]{task});
    db.delete(TaskContract.TaskEntry.TABLE,
            TaskContract.TaskEntry.COL_TASK_tar,
                    new String[]{date});


    db.close();
    updateUI2();
    updateUI();
}

private void updateUI() {
    ArrayList<String> taskList = new ArrayList<>();
    SQLiteDatabase db = mHelper.getReadableDatabase();
    Cursor cursor = db.query(TaskContract.TaskEntry.TABLE,
            new String[]{TaskContract.TaskEntry._ID, TaskContract.TaskEntry.COL_TASK_tar},
            null, null, null, null, null);
    while (cursor.moveToNext()) {
      int idx1 = cursor.getColumnIndex(TaskContract.TaskEntry.COL_TASK_tar);
        taskList.add(cursor.getString(idx1));


    }


    if (mAdapter == null) {
        mAdapter = new ArrayAdapter<>(this,
                R.layout.item_todo,
                R.id.task_title,
                taskList);
        mTaskListView.setAdapter(mAdapter);
    } else {
        mAdapter.clear();
        mAdapter.addAll(taskList);
        mAdapter.notifyDataSetChanged();
    }

    cursor.close();
    db.close();
}
private void updateUI2() {
    ArrayList<String> dateList = new ArrayList<>();
    SQLiteDatabase db = mHelper.getReadableDatabase();
    Cursor cursor2 = db.query(TaskContract.TaskEntry.TABLE,
            new String[]{TaskContract.TaskEntry._ID, TaskContract.TaskEntry.COL_TASK_TITLE},
            null, null, null, null, null);
    while (cursor2.moveToNext()) {
        int idx = cursor2.getColumnIndex(TaskContract.TaskEntry.COL_TASK_TITLE);
        dateList.add(cursor2.getString(idx));


    }


    if (mAdapter2 == null) {
        mAdapter2 = new ArrayAdapter<>(this,
                R.layout.item_todo,
                R.id.task_title,
                dateList);
        mTaskListView.setAdapter(mAdapter2);
    } else {
        mAdapter2.clear();
        mAdapter2.addAll(dateList);
        mAdapter2.notifyDataSetChanged();
    }

    cursor2.close();
    db.close();
}

LOGCAT

07-28 04:04:16.722 25806-25806/com.lidenoapp.ajanda E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.AbsListView.obtainView(AbsListView.java:2346) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.ListView.measureHeightOfChildren(ListView.java:1280) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.ListView.onMeasure(ListView.java:1188) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:715) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.View.measure(View.java:18788) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.Choreographer.doCallbacks(Choreographer.java:670) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.Choreographer.doFrame(Choreographer.java:606) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.os.Handler.handleCallback(Handler.java:739) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.os.Handler.dispatchMessage(Handler.java:95) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.os.Looper.loop(Looper.java:148) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 android.app.ActivityThread.main(ActivityThread.java:5417) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime:在 java.lang.reflect.Method.invoke(本机方法) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 07-28 04:56:15.284 27235-27235/com.lidenoapp.ajanda E/AndroidRuntime: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我阅读了有关NullPointerExpection 的其他问题,但我找不到可以帮助我的东西。非常感谢...

【问题讨论】:

    标签: java android android-arrayadapter


    【解决方案1】:

    谨慎使用 String date = String.valueOf(dateEditText.getText());如果您将 null 作为函数的输入,它将崩溃。执行以下操作

    try {
                String date = String.valueOf(dateEditText.getText());
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    【讨论】:

    • 或者你可以做 TextUtils.isEmpty() 来检查字符串输入是否有效。
    • 我试过了,没用:((我不确定写对了)
    • 那么你必须找出哪一行确实让你的应用程序崩溃。删除更新 UI 和 UpdateUI2,看看是否仍然崩溃。你知道如何使用调试模式,设置断点,这样你就知道你的代码哪一行崩溃了。 NullPointerExpection 可以以多种方式抛出,可以在 String.ValueOf 中,可以为您的适配器提供一个空列表。等等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多