2016-04-02 26 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

我们有我们自己的电子邮件客户端和服务器,所以它没关系。该文件非常小(实际文本很少)。但我似乎无法得到实际的数据库文件发送。哎呀,我甚至不能参考它。我现在很沮丧。 –

相关问题