2016-01-21 80 views
1

我從服務器獲取大量信息並將它們加載到SQLite數據庫(大約4000行)中。我使用下面的代碼插入信息:當按下電源按鈕時,Android SQLite數據庫被鎖定(屏幕關閉)

String DB_PATH = "/data/data/com.example.app.myapplication/databases/"; 
      String DB_NAME = "mydb.sqlite"; 
      SQLiteDatabase sqdb = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
      try { 
       //Getting info 
       sqdb.beginTransaction(); 
       String[] all_elements = all.split("_"); 
       for (int j = 0; j < all_elements .length; j++) { 
        if (all_elements [j].length() >= 1) { 
         m.setLength(0); 
         m.append("insert into .....the query"); 
         m.append(");"); 
         sqdb.execSQL(m.toString().replaceAll("\n", "").replaceAll("\r", "").replaceAll("\t", "")); 

         changeProgressMessage("Adding element " + String.valueOf(j + 1) + "/" + String.valueOf(all_elements .length)); 
        } 
       } 
       sqdb.setTransactionSuccessful(); 
       sqdb.endTransaction(); 
      } 
      catch (Exception ex) 
      { 
       Log.d("Error",ex.toString()); 
       sqdb.setTransactionSuccessful(); 
       sqdb.endTransaction(); 

      } 

點,在插入時的信息,如果我按下電源按鈕或屏幕關閉時,該應用程序崩潰,我得到說,一個錯誤數據庫被鎖定。 請注意,我正在使用另一個連接到SQLite數據庫,但在使用第二個數據庫之前我已關閉它。

db.openDataBase(); 

       String[] array_elements = array.split("_"); 
       for (int i = 0; i < array_elements .length; i++) { 
        String Details = ""; 
        if (!array_elements [i].isEmpty() && !array_elements [i].equals("")) { 

         mbuilder.setLength(0); 
         mbuilder.append(array_elements [i] + ",'" + helper.getdatetime() + "'"); 

         db.insertelements(mbuilder.toString(), "Element"); 
         changeProgressMessage("Element" + String.valueOf(i + 1) + "/" + String.valueOf(array_elements .length) + " inserted"); 


        } 


       } 
       db.close(); 

請幫忙嗎?

+0

是否可以發佈您的logcat? –

回答

1

對不起,我正在訪問數據庫的恢復方法,所以當關閉屏幕然後打開時,恢復方法也被稱爲裏面的數據庫方法,它解釋了崩潰。

相關問題