正如标题所说,我得到NullPointerException
,我不明白为什么。我已经多次通过代码并在输入之前将数据打印到logcat并且看起来很好。在我输入代码之前,我只想告诉您我使用的是RecyclerView
,如果它不明显的话。
// Implement OnLongClick listener. Long Clicked items is removed from list.
@Override
public boolean onLongClick(View view) {
ViewHolder holder = (ViewHolder) view.getTag();
if (view.getId() == holder.mNameTextView.getId()) {
mDataset.remove(holder.getPosition());
Log.i("NULL POINTER", (holder.mNameTextView.getText().toString()));
String temp = sqLiteDBadapter.getRowid(holder.mNameTextView.getText().toString()); // --- It fails on this line
Long temp2 = Long.parseLong(temp);
sqLiteDBadapter.deleteScore(temp2);
// Call this method to refresh the list and display the "updated" list
notifyDataSetChanged();
Toast.makeText(sContext, "Item " + holder.mNameTextView.getText() + " has been removed from list",
Toast.LENGTH_SHORT).show();
}
return false;
}
以下是SQLiteDBadapter的一部分:
public String getRowid(String date) {
mDbHelper = new DatabaseHelper(mCtx);
SQLiteDatabase db=mDbHelper.getReadableDatabase();
Cursor c = db.rawQuery("SELECT * from " + DATABASE_TABLE + " WHERE date = ?" , new String[] { date });
if (c.moveToFirst()){
long temp;
temp = c.getLong(c.getColumnIndex(KEY_ROWID));
rowID = String.valueOf(temp);
Log.i("----_ROW ID = ", rowID);
}else if (!c.moveToFirst())
Log.i("CURSOR ERROR", " CURSOR INDEX MOST LIKELY 0");
else
c.moveToFirst();
return rowID;
}
我在代码
中将rowID声明为String rowID;
更早
正如您在此处所见:Database SQLite Fiddle获取行的代码完全正常。
同样,Log.i
NULL POINTER在崩溃前打印输出:I/NULL POINTER﹕ Nov 2, 2014 11:51:14 AM
,这是根据Fiddle
11-02 12:29:30.917 419-419/com.archeryscoresmaterialdesign W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4160f620)
11-02 12:29:30.927 419-419/com.archeryscoresmaterialdesign E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.archeryscoresmaterialdesign, PID: 419
java.lang.NullPointerException
at com.archeryscoresmaterialdesign.RecyclerViewAdapter.onLongClick(RecyclerViewAdapter.java:90)
at android.view.View.performLongClick(View.java:4476)
at android.widget.TextView.performLongClick(TextView.java:8362)
at android.view.View$CheckForLongPress.run(View.java:18451)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5171)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
在此代码中
if (c.moveToFirst()){
long temp;
temp = c.getLong(c.getColumnIndex(KEY_ROWID));
rowID = String.valueOf(temp);
Log.i("----_ROW ID = ", rowID);
}else if (!c.moveToFirst())
Log.i("CURSOR ERROR", " CURSOR INDEX MOST LIKELY 0");
else
c.moveToFirst();
你最终可能永远不会为rowID分配任何东西,如果你简单地声明它 String rowID; 不字符串rowID = new String();它保持为空。这有可能吗?
答案 1 :(得分:1)
您是否正在创建sqLiteDBadapter?
我想你已经创建了SQLiteOpenHelper的子类。您正在尝试在Object上调用方法,该方法为null。试试这个:
SQLiteDBadapter db = new SQLiteDBadapter(ApplicationContext);
现在你应该可以调用任何方法了。 完成阅读,写作,技术后...别忘了关闭数据库连接。
db.close();