从另一个类调用方法时出现NullPointerException

时间:2014-02-01 14:44:09

标签: java android sqlite nullpointerexception

我试图让一个简单的笔记应用程序工作,但我在调用某个方法时继续得到nullPointerException。

检索对话框布局中textEdit的值就好了。 我通过记录结果来检查。 当我尝试运行createNotes(content)方法时会出现问题。

public class Dialog extends Activity {
NotesBean notesBean = null;
public NotesDao datasource;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e("log", "Running NotiMgr");
    setContentView(R.layout.dialog);
    RelativeLayout layout = (RelativeLayout) findViewById(R.id.dialog_background);  
    layout.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        EditText mEdit = (EditText) v.findViewById(R.id.editText);
        String content = mEdit.getText().toString();
        Log.v("EditText", content);

        //THIS IS WHERE THE ERROR OCCURS
        datasource.createNotes(content);
        finish();
        }
    });
}

此类处理插入,删除和db相关的东西。我已经尝试过调试,但它从未到过这个类。

public class NotesDao {
public NotesBean createNotes(String content) {
    try {
        Log.v("createNotes", content);
        ContentValues values = new ContentValues();
        values.put(DbHelper.COLUMN_CONTENT, content);
        long insertSeq = database.insert(DbHelper.TABLE_NOTES, null, values);
        Cursor cursor = database.query(
                DbHelper.TABLE_NOTES,                       //String table
                allColumns,                                 //String[] columns
                DbHelper.COLUMN_SEQ + " = " + insertSeq,        //String selection
                null,                                       //String[] selectionArgs
                null,                                       //String groupBy
                null,                                       //String having
                null);                                      //String orderBy
        cursor.moveToFirst();
        NotesBean newNotes = cursorToNotes(cursor);
        cursor.close();
        return newNotes;
    } catch (Exception e) {
          throw new RuntimeException(e);
    }
}

btw我还确认db是通过logcat打开的... 但这是一次不同的活动。这是否意味着我应该关闭它并在此活动中再次打开它?

任何帮助将不胜感激!谢谢!

6 个答案:

答案 0 :(得分:1)

变化:

public NotesDao datasource;

public NotesDao datasource=new NotesDao();

答案 1 :(得分:1)

在调用datasource之前,您从未初始化createNotes(),因此NullPointerException不会出现意外。

如果您不需要多个实例,则可以考虑将NotesDao设为Singleton。只需谷歌Singleton

答案 2 :(得分:0)

你从来没有初始化'datasource'对象,这就是它给出空指针异常的原因。

答案 3 :(得分:0)

NullPointer异常总是会出现缺少初始化或错误的视图元素初始化。在您的情况下,您缺少初始化datasource对象(如前面的答案所指出的那样)。

有价值的建议将始终交叉检查您的程序是否已初始化,您也可以使用异常处理来处理您不确定的情况,例如来自不同来源的数据。

答案 4 :(得分:0)

您没有实例化您的NoteDao对象。请更新您的代码:

   public NotesDao datasource=new NotesDao();

答案 5 :(得分:0)

如上所述,您的其他课程未初始化。

在你的onCreate中进行初始化。

datasource = new NotesDao();

您必须等到在onCreate中创建类才能初始化该类中的变量。