2012-06-05 77 views
0

我有一個問題沒有被讀取 我已經加入名爲MYDB資產的數據庫文件的數據庫文件,但是當我運行我的代碼,它說,它沒有被定位。它調用這個土司Toast.makeText(這一點, 「不接觸發現」,Toast.LENGTH_LONG).show();這是因爲沒有記錄被返回而被調用。另外我知道它找到的文件是沒有FileNotFoundException異常。這是一個Android應用程序開發書的例子。Android的數據庫沒有返回的記錄,但sqlitebrowser包含數據

public class DatabaseActivity extends Activity { 
    /** Called when the activity is first created. */ 
    TextView quest, response1, response2; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView quest = (TextView) findViewById(R.id.quest); 


     try {   
      String destPath = "/data/data/" + getPackageName() + "/databases/MyDB"; 
      File f = new File(destPath);    
      if (!f.exists()) {   
       CopyDB(getBaseContext().getAssets().open("mydb"), 
        new FileOutputStream(destPath)); 
      } 
     } catch (FileNotFoundException e) {   
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     DBAdapter db = new DBAdapter(this); 


     //---get a contact--- 
     db.open(); 
     Cursor c = db.getContact(2); 
     if (c.moveToFirst())   
      DisplayContact(c); 
     else 
      Toast.makeText(this, "No contact found", Toast.LENGTH_LONG).show(); 
     db.close(); 



    } 

    public void CopyDB(InputStream inputStream, OutputStream outputStream) 
    throws IOException { 
     //---copy 1K bytes at a time--- 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = inputStream.read(buffer)) > 0) { 
      outputStream.write(buffer, 0, length); 
     } 
     inputStream.close(); 
     outputStream.close(); 
    } 

    public void DisplayContact(Cursor c) 
    { 
    quest.setText(String.valueOf(c.getString(1)));  
     //quest.setText(String.valueOf("this is a text string"));  
    } 
} 

有沒有更好的上傳數據的方法。

回答

1

幾件事情想到這裏...

  1. 因爲!f.exists()檢查,那麼一旦數據庫中存在(也許是空的),那麼它不會再複製它。因此,也許現在,複製它所有的時間,直到你的工作扭結,然後在!f.exists()

  2. 加我有不同的結果與e.printStackTrace(),也許改變Log.e(TAG, "message", e),看看你開始看到顯示了錯誤logcat的

至於更好的辦法......我已經這樣做了幾種不同的方法...... 1.是創建一個文件(JSON,CVS等),再處理並加載它,如果數據庫爲空 2.與第一個類似,但創建java序列化對象數組並將其加載到數據庫(如果數據庫爲空)。

此外,我不知道是什麼DBAdapter樣子,並且因爲它包裝數據庫中的問題可能是在那裏。

+0

謝謝,我會試試看。我不認爲它的DBAdapter,因爲我已經用於其他例子,它運作良好。我剛將數據庫文件添加到資產並將其讀取時遇到了問題。它上傳正常。數據似乎沒有被讀入光標,所以它可以輸出到一個XML佈局文件。 – al23dev

+0

但是,被'DBAdapter'打開確切相同的位置'字符串destPath = 「/數據/數據/」 + getPackageName()+ 「/數據庫/ MYDB」;'? (在文件名中的相同大小寫等)。也許,你正在將資源數據庫複製到不同的文件? – stuckless

+0

這是我固定它的表被稱爲basic_table這沒有似乎工作表的名稱。所以我刪除了不喜歡的內容。我也接受了關於不使用printStackTrace()的建議。另外感謝您提供!if.exists()語句的建議 – al23dev

相關問題