我试图让一个简单的笔记应用程序工作,但我在调用某个方法时继续得到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打开的... 但这是一次不同的活动。这是否意味着我应该关闭它并在此活动中再次打开它?
任何帮助将不胜感激!谢谢!
答案 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中创建类才能初始化该类中的变量。