2016-04-02 14 views
0

私はどこにでも見えましたが、これを行う方法がわかりません。私はとてもイライラしています...アプリケーション内からSQLite dbファイルを送信

SQLite dbファイルを(電子メールで)送信する方法を教えてください。

これは簡単なことです。私はそれを文字列に変換して添付することができますが、実際のdbファイルを送信したいと思います。私は外部のSDカードを持たない新しい電話を使用しています。

このアプリケーションは、ユーザーが入力したフォームにすぎず、SQLiteデータベースに保存されます。それは素晴らしいことです。 dbを文字列(テキスト)に出力してから送信します。しかし、私は実際のdbファイルを電子メールで送信したい(私はC#を使用してそれを読み込み、処理し、実際のフォームを "再作成"することができます)。

また、SQLite以外のものを使用する必要がありますか?

編集:これは私が作った限りです。それは動作するようですが、実際にファイルを添付していないか、またはファイルが "空白/空"です。デバッグログにそのようなファイルやディレクトリはありません。ここでは、デバッグログのスクリーンショット:

//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

解決済み。 FileProviderはデータベースディレクトリにアクセスできません。 dbファイルは、添付する前にfilesディレクトリにコピーする必要があります。以下のソリューションを参照してください。Android: FileProvider "Failed to find configured root"

0

http://imgur.com/oyzdtuJは、あなたがこの方法で、任意の数の何ができるこの回答

Android Utility to send sqlite db to server

を参照してください。私はそれをWebサービスに投稿するのが最も簡単だと言います。電子メールだけを使用できるのであれば、圧縮してエンコードして電子メールに添付しますが、苦痛を感じます。

+0

dbファイルを取得するJavaコード?たいていの場合、ユーザー入力のテキスト、チェックボックスなどであり、それほど大きなものではありません。 –

+0

私は依然として電子メールに注意していますが、一部の電子メールクライアントやサーバーには、どれくらいのデータが許可されるかといった制限があります。優先ルートとなるWebサービスを使用できる場合は、 FTPなど – Harry

+0

私たちは独自のメールクライアントとサーバーを持っているので大丈夫です。ファイルは実際には小さいです(実際のテキストはほとんどありません)。しかし、実際のdbファイルを送信することはできません。ヘック、私はそれを参照するように見えることができません。私は今これでとても不満です。 –

関連する問題