【问题标题】:Send SQLite db file from within app从应用程序内发送 SQLite db 文件
【发布时间】:2016-04-09 08:59:56
【问题描述】:

我到处寻找,但我不知道如何做到这一点;我很沮丧...

如何允许用户(通过电子邮件)发送 SQLite db 文件?

简而言之就是这样。我可以将其转换为字符串并附加,但我想发送实际的 db 文件。我正在使用没有外部 SD 卡的新手机。

应用程序只是用户填写的表单,然后将其保存到 SQLite 数据库。这非常有效。将数据库打印到字符串(文本)然后发送它也是如此。但是,我希望用户通过电子邮件发送实际的 db 文件(这样我就可以使用 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);

}

【问题讨论】:

    标签: sqlite android-studio


    【解决方案1】:

    看到这个答案

    Android Utility to send sqlite db to server

    您可以通过多种方式做到这一点。我会说将它发布到网络服务是最简单的。如果您只能使用电子邮件,那么我会将其压缩和编码并将其附加到电子邮件中,但这听起来很痛苦。

    【讨论】:

    • Java 代码“获取” db 文件?它主要是用户输入文本、复选框等,所以并没有那么大。
    • 我仍然对电子邮件保持谨慎,一些电子邮件客户端和服务器对它们允许的数据量等有限制。如果您可以使用将是首选路线的网络服务,如果不是那么您正在查看电子邮件或 FTP 等。
    • 我们有自己的电子邮件客户端和服务器,所以没关系。而且文件非常小(实际文本很少)。但我似乎无法发送实际的 db 文件。哎呀,我什至似乎无法引用它。我现在对此感到非常沮丧。
    【解决方案2】:

    解决了。 FileProvider 无法访问数据库目录。 db 文件必须在附加之前复制到 files 目录。在此处查看解决方案:Android: FileProvider "Failed to find configured root"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 2012-02-10
      • 2020-07-04
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      相关资源
      最近更新 更多