2013-02-22 109 views
0

當試圖讓我的ListView刷新時,我的數據庫數據更改,我的列表視圖現在完全空白。 itemare被添加到數據庫但他們不再被顯示在列表視圖中。在所有db列中,只有一個被設置爲在listview(sname)中顯示。我的Logcat指向一個查詢,但林不知道如何進行修復。請指教。ListView空白不顯示數據庫條目

的logcat:

02-19 22:41:41.303: W/SQLiteCursor(1083): requery() failed database /data/data/com.loginplus.home/databases/SiteLogindb (conn# 0) already closed 
    02-19 22:41:41.303: W/SQLiteCursor(1083): java.lang.IllegalStateException: database /data/data/com.loginplus.home/databases/SiteLogindb (conn# 0) already closed 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.getDbConnection(SQLiteDatabase.java:2407) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.getDatabaseHandle(SQLiteDatabase.java:2388) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:246) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.app.Activity.performRestart(Activity.java:4505) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.app.Activity.performResume(Activity.java:4531) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434) 
    02-19 22:41:41.303: W/SQLiteCursor(1083):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1173) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.os.Handler.dispatchMessage(Handler.java:99) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.os.Looper.loop(Looper.java:137) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at java.lang.reflect.Method.invokeNative(Native Method) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at java.lang.reflect.Method.invoke(Method.java:511) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    02-19 22:41:41.303: W/SQLiteCursor(1083): at dalvik.system.NativeStart.main(Native Method) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): requery() failed database /data/data/com.loginplus.home/databases/SiteLogindb (conn# 0) already closed 
    02-19 22:41:41.323: W/SQLiteCursor(1083): java.lang.IllegalStateException: database /data/data/com.loginplus.home/databases/SiteLogindb (conn# 0) already closed 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.getDbConnection(SQLiteDatabase.java:2407) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.getDatabaseHandle(SQLiteDatabase.java:2388) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:246) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.app.Activity.performRestart(Activity.java:4505) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.app.Activity.performResume(Activity.java:4531) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1173) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.os.Handler.dispatchMessage(Handler.java:99) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.os.Looper.loop(Looper.java:137) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at java.lang.reflect.Method.invokeNative(Native Method) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at java.lang.reflect.Method.invoke(Method.java:511) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    02-19 22:41:41.323: W/SQLiteCursor(1083): at dalvik.system.NativeStart.main(Native Method) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): requery() failed database /data/data/com.loginplus.home/databases/SiteLogindb (conn# 0) already closed 
    02-19 22:41:41.343: W/SQLiteCursor(1083): java.lang.IllegalStateException: database /data/data/com.loginplus.home/databases/SiteLogindb (conn# 0) already closed 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.getDbConnection(SQLiteDatabase.java:2407) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteDatabase.getDatabaseHandle(SQLiteDatabase.java:2388) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:246) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.app.Activity.performRestart(Activity.java:4505) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.app.Activity.performResume(Activity.java:4531) 
    02-19 22:41:41.343: W/SQLiteCursor(1083): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1173) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at android.os.Looper.loop(Looper.java:137) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at java.lang.reflect.Method.invokeNative(Native Method) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at java.lang.reflect.Method.invoke(Method.java:511) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    02-19 22:41:41.343: W/SQLiteCursor(1083):  at dalvik.system.NativeStart.main(Native Method) 

logcat的2513分之2

02-24 20:44:04.032: E/AndroidRuntime(1323): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.loginplus.home/com.loginplus.home.LoginList}: java.lang.NullPointerException 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.os.Handler.dispatchMessage(Handler.java:99) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.os.Looper.loop(Looper.java:137) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at java.lang.reflect.Method.invokeNative(Native Method) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at java.lang.reflect.Method.invoke(Method.java:511) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at dalvik.system.NativeStart.main(Native Method) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): Caused by: java.lang.NullPointerException 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at com.loginplus.home.LoginList.populateList(LoginList.java:92) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at com.loginplus.home.LoginList.onCreate(LoginList.java:41) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.Activity.performCreate(Activity.java:4465) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
    02-24 20:44:04.032: E/AndroidRuntime(1323): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 

活動類:

public class LoginList extends Activity implements OnClickListener, OnItemClickListener { 

    private ListView loginList; 
    private Button webLogin; 

    private ListAdapter loginListAdapter; 

    private ArrayList<LoginDetails> loginArrayList; 

    List<String> arrayList = new ArrayList<String>(); 



@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
arrayList = populateList(); 
loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList()); 
setContentView(R.layout.login_listview); 


loginList = (ListView) 
findViewById(R.id.loginlist); 
loginList.setOnItemClickListener(this); 

webLogin = (Button) 
findViewById(R.id.button3); 
webLogin.setOnClickListener(this); 


} 

@Override 
public void onClick (View v) { 
Intent webLoginIntent = new Intent (this, LoginPlusActivity.class); 
startActivity(webLoginIntent); 

} 

public List<String> populateList(){ 

List<String> webNameList = new ArrayList<String>(); 

dataStore openHelperClass = new dataStore (this); 

SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase(); 

Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); 

//startManagingCursor(cursor); (revised 2/25/13) 


while (cursor.moveToNext()){ 
String sName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_SITE)); 
String wUrl = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_ADDRESS)); 
String uName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_USERNAME)); 
String pWord = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_PASSWORD)); 
String lNotes = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_NOTES)); 

LoginDetails lpDetails = new LoginDetails(); 

    lpDetails.setsName(sName); 
    lpDetails.setwUrl(wUrl); 
    lpDetails.setuName(uName); 
    lpDetails.setpWord(pWord); 
    lpDetails.setlNotes(lNotes); 

    loginArrayList.add(lpDetails); 
    webNameList.add(sName); 
} 

cursor.close(); //(revised 2/25/13) 
return webNameList; 
} 



@Override 
protected void onResume() { 
super.onResume(); 

ArrayList<LoginDetails> loginArrayList = new ArrayList<LoginDetails>(); 
loginArrayList.clear(); 

arrayList.clear(); 

arrayList = populateList(); 

dataStore refreshHelper = new dataStore (this); 
SQLiteDatabase sqliteDatabase = refreshHelper.getWritableDatabase(); 
Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null); 
String[]columns = new String[] { dataStore.COLUMN_NAME_SITE, dataStore.COLUMN_NAME_ADDRESS, dataStore.COLUMN_NAME_USERNAME, dataStore.COLUMN_NAME_PASSWORD, dataStore.COLUMN_NAME_NOTES }; 
int[] to = new int[]{R.id.rusName, R.id.ruwUrl, R.id.ruuName, R.id.rupWord, R.id.ruNotes}; 
SimpleCursorAdapter loginListAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, columns, to); 
loginListAdapter.notifyDataSetChanged(); 

} 

@Override 
public void onItemClick(AdapterView<?> arg0 , View arg1, int arg2, long arg3) { 
Toast.makeText(getApplicationContext(), "Selected ID :" + arg2,  Toast.LENGTH_SHORT).show(); 

Intent updateDeleteLoginInfo = new Intent (this, UpdateDeleteLoginList.class); 



LoginDetails clickedObject = loginArrayList.get(arg2); 

    Bundle loginBundle = new Bundle(); 
    loginBundle.putString("clickedWebSite",clickedObject.getsName()); 
    loginBundle.putString("clickedWebAddress",clickedObject.getwUrl()); 
    loginBundle.putString("clickedUserName",clickedObject.getuName()); 
    loginBundle.putString("clickedPassWord",clickedObject.getpWord()); 
    loginBundle.putString("clickedNotes",clickedObject.getlNotes()); 

    updateDeleteLoginInfo.putExtras(loginBundle); 

    startActivityForResult(updateDeleteLoginInfo, 0); 
    } 
    } 

回答

0

在我看來,這個問題是在這條線startManagingCursor(cursor);。您要求活動管理遊標,但是在完成遊標後立即關閉連接。只需發表評論,並關閉遊標而不是數據庫。只需將sqliteDatabase.close();更改爲cursor.close()即可。

+0

應用更改,現在接收到第92行的新logcat錯誤:loginArrayList.add(lpDetails);和第41行:arrayList = populateList();查看新發布的logcat和修改後的代碼 – user1165694 2013-02-26 13:14:09

+0

您的'loginArrayList'爲空。你在你的'onCreate'方法內調用'arrayList = populateList();'但你不會在任何地方初始化它。在onCreate完成後的'onResume'中,創建一個局部變量'loginArrayList',它覆蓋該範圍內的'loginArrayList'實例變量。我建議你在調用onCreate中的'populate()'之前初始化你的'loginArrayList'實例變量,或者從'onCreate'中移除你的'populate()'調用,並使用'loginArrayList = new ArrayList ;'在'onResume'中。 – ebarrenechea 2013-02-26 14:11:44