2016-04-02 63 views
0

我看到處處都找不到,我無法找到如何做到這一點;我很沮喪...從應用程序內發送SQLite數據庫文件

我如何允許用戶發送(通過電子郵件)的SQLite數據庫文件?

就是這樣。我可以將其轉換爲字符串並附加,但我想發送實際的數據庫文件。而且我正在使用一款沒有外置SD卡的新手機。

該應用程序只是用戶填寫的表單,然後將其保存到SQLite數據庫。這很奇妙。就像將數據庫打印到字符串(文本)然後發送它一樣。但是,我希望用戶通過電子郵件發送實際的數據庫文件(這樣我就可以使用C#讀取,處理它,並「重新創建」一個真實的表單)。

或者我應該使用SQLite以外的東西?

編輯:這是我所做的。它似乎工作,但它實際上並沒有附加文件或文件是「空白/空」。調試日誌說沒有這樣的文件或目錄。在這裏調試日誌截圖:http://imgur.com/oyzdtuJ

//trying again to send a SQL db file 
//this seems to work and shows that it's attaching a file, but the file is empty so it won't attach 
//gmail will say "cant attach empty file" 
private void sendFile(String email){ 

    File myFile = this.getFileStreamPath("testresults.db"); 
    if(myFile != null) { 
     Log.d("LOG PRINT SHARE DB", "File Found, Here is file location: " + myFile.toString()); 
    }else { 
     Log.w("Tag", "file not found!"); 
    } 

    Uri contentUri = FileProvider.getUriForFile(this, "com.columbiawestengineering.columbiawest.MainActivity", myFile); 
    Log.d("LOG PRINT SHARE DB", "contentUri got: here is contentUri: " + contentUri.toString()); 

    //grant permision for app with package "com.columbiawestengineering.columbiawest", eg. before starting other app via intent 
    this.grantUriPermission("com.columbiawestengineering.columbiawest", contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    Log.d("LOG PRINT SHARE DB", "permission granted, here is contentUri: " + contentUri.toString()); 

    Intent shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.setType("application/octet-stream"); 
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "blaaa subject"); 
    String to[] = { email }; 
    shareIntent.putExtra(Intent.EXTRA_EMAIL, to); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, "blah blah message"); 
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); 
    startActivityForResult(Intent.createChooser(shareIntent, "Send mail..."), 1252); 

    //revoke permisions 
    this.revokeUriPermission(contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 

} 

回答

0

看到這個答案

Android Utility to send sqlite db to server

你可以這樣做任何數量的方法。我想說,發佈到Web服務是最簡單的。如果你只能使用電子郵件,那麼我會壓縮和編碼它並附加到電子郵件,但這聽起來很痛苦。

+0

要「獲取」db文件的Java代碼?它主要是用戶輸入文本,複選框等,所以它不是那麼大。 –

+0

雖然我仍然對電子郵件持謹慎態度,但一些電子郵件客戶端和服務器對於允許的數據量有限制等。如果您可以使用Web服務作爲首選路由,如果不是,那麼您正在查看電子郵件或FTP等 – Harry

+0

我們有我們自己的電子郵件客戶端和服務器,所以它沒關係。該文件非常小(實際文本很少)。但我似乎無法得到實際的數據庫文件發送。哎呀,我甚至不能參考它。我現在很沮喪。 –

相關問題