2016-04-02 29 views
0

Ich habe überall gesucht und ich kann nicht herausfinden, wie das geht; Ich bin so frustriert ...Sende SQLite DB-Datei aus der App

Wie kann ich dem Benutzer erlauben, die SQLite DB-Datei (per E-Mail) zu senden?

Das ist es in aller Kürze. Ich kann es in String und Anhang konvertieren, aber ich möchte die tatsächliche db-Datei senden. Und ich benutze ein neues Telefon, das keine externe SD-Karte hat.

Die App ist nur ein Formular, das der Benutzer ausfüllt, dann wird es in einer SQLite-Datenbank gespeichert. Das funktioniert wunderbar. Ebenso druckt die db nach string (Text) und sendet sie dann. Aber ich möchte, dass der Benutzer die tatsächliche DB-Datei per E-Mail sendet (damit ich C# zum Lesen, Verarbeiten und "Re-Erstellen" eines echten Formulars verwenden kann).

Oder sollte ich etwas anderes als SQLite verwenden?

Edit: Das ist so weit wie ich es gemacht habe. Es scheint zu funktionieren, aber es hängt nicht wirklich die Datei oder vielmehr die Datei ist "leer/leer". Debug-Protokoll sagt keine solche Datei oder Verzeichnis. Screenshot von Debug-Log hier: 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); 

} 

Antwort

0

Sehen Sie diese Antwort

Android Utility to send sqlite db to server

du eine beliebige Anzahl von Möglichkeiten tun konnte. Ich würde sagen, es ist am einfachsten, es in einen Webservice zu posten. Wenn Sie nur E-Mails verwenden können, würde ich sie komprimieren und kodieren und sie an eine E-Mail anhängen, aber das klingt schmerzhaft.

+0

Java-Code, um die db-Datei "zu bekommen"? Es ist meistens nur Text, Checkboxen usw., also ist es nicht wirklich so groß. –

+0

Ich würde immer noch vorsichtig mit E-Mail sein, einige E-Mail-Clients und Server haben Grenzen, wie viele Daten sie zulassen usw. Wenn Sie einen Web-Service verwenden können, der die bevorzugte Route wäre, dann sehen Sie sich E-Mail oder FTP usw. – Harry

+0

Wir haben unseren eigenen E-Mail-Client und Server, also ist es in Ordnung. Und die Datei ist wirklich klein (sehr wenig tatsächlicher Text). Aber ich kann nicht scheinen, die tatsächliche DB-Datei zu senden. Verdammt, ich kann mich nicht einmal darauf beziehen. Ich bin gerade jetzt so frustriert. –

Verwandte Themen