从app中发送SQLite db文件

时间:2016-04-02 00:09:52

标签: sqlite android-studio

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

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

简而言之就是这样。我可以将它转换为字符串并附加,但我想发送实际的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);

}

2 个答案:

答案 0 :(得分:0)

看到这个答案

Android Utility to send sqlite db to server

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

答案 1 :(得分:0)

解决。 FileProvider无法访问数据库目录。必须先将db文件复制到files目录,然后再附加它。请在此处查看解决方案:Android: FileProvider "Failed to find configured root"