2014-11-02 92 views
0

正如标题所说,我得到一个NullPointerException,我不知道为什么。我已经完成了几次代码,并在输入logcat之前将数据打印出来,看起来很好。在输入代码之前,我只想告诉您,如果不明显,我正在使用RecyclerViewNullPointerException获取SQLite rowID

// 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; ealier正如你可以在这里看到:Database SQLite Fiddle用于获取该行的代码工作完全正常。

另外,Log.i空指针打印输出崩溃权之前: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) 

回答

1

您是否正在创建sqLiteDBadapter?

我想你已经创建了SQLiteOpenHelper的子类。您正尝试在Object上调用方法,该方法为null。试试这个:

SQLiteDBadapter db = new SQLiteDBadapter(ApplicationContext); 

现在你应该可以调用它的任何方法。 当你完成阅读,写作,技术..不要忘记关闭数据库连接。

db.close(); 
+0

好抓。我只将它声明为'private SQLiteDBadapter sqLiteDBadapter;'但我不认为我可以在'RecyclerViewAdapter'内部执行'getApplicationContext()'。有没有办法解决? – Unreliaable 2014-11-02 18:06:34

+0

终于搞定了。没有注意到上下文已经在我的RecyclerView中声明。如果我无法弄清楚下一部分,就不得不开始一个新的话题。它获取id和所有,但NullPointer删除它。不管怎样,再次感谢。 – Unreliaable 2014-11-02 19:03:53

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; 不是 String rowID = new String();它保持为空。这有可能吗?