2017-03-19 4 views
0

Für eine Zuweisung müssen wir in der Lage sein, einen benutzerdefinierten Dateityp zu speichern und ihn dann wieder einlesen zu können. Ich dachte, ich könnte die FileInputStream-Klasse verwenden, so dass ich einfach myInStream.read() verwenden konnte, um alle benötigten Informationen aus der Datei zu erhalten. Ich habe jedoch ein Problem mit der Datei in den FileInputStream bekommen. Ich war in der Lage, den URI zu bekommen, aber es scheint, dass die Methode, die ich verwendet habe, um den URI zu erhalten, einen URI-Typ erzeugt, der mit der Dateiklasse inkompatibel ist. Ich habe den folgenden Code in meinem onActivityResult(), kurz bevor ich anfangen zu lesen:Einen URI in einen FileInputStream einfügen

Uri pickedFile = data.getData(); 
    File myFile = new File(pickedFile); 
    FileInputStream inStream = new FileInputStream(myFile); 

In der zweiten Zeile steht „Kann Konstruktor‚Datei (android.net.Uri)‘nicht lösen“, so gehe ich davon aus Ich muss die URI in ein anderes Format konvertieren, aber ich habe keine Ahnung, wie ich das anstellen soll. Jede Hilfe würde sehr geschätzt werden!

EDIT: Für zukünftige Referenz sieht der feste Code wie folgt aus: Uri pickedFile = data.getData(); InputStream inStream = getContentResolver(). OpenInputStream (PickedFile);

Antwort

0

Ich gehe davon muss ich

No. A Uri ist eine undurchsichtige Griff zu einem gewissen Inhalt, wie https://stackoverflow.com/questions/42893406/putting-a-uri-into-a-fileinputstream den URI in ein anderes Format zu konvertieren. Es ist keine Datei.

Sie zeigen nicht, woher Ihre Uri stammt. Meine Annahme, die pickedFile genannt, ist, dass Sie ACTION_GET_CONTENT oder ACTION_OPEN_DOCUMENT verwenden. In keinem Fall wählt der Benutzer eine Datei aus.

Wenn meine Vermutung richtig zu ist, wo die Uri herkommt, dass Uri wird entweder ein file Schema oder ein content Schema. Sie können einen InputStream auf beide Arten von Uri auf die gleiche Weise erhalten: Anruf openInputStream() auf einem ContentResolver. Sie erhalten eine ContentResolver durch den Aufruf getContentResolver() auf einem Context, wie zum Beispiel Activity oder Service.

+0

Ja, das hat es behoben. Ich weiß nicht, warum ich dachte, ich brauchte FileInputStreams anstelle von InputStreams. Danke, Mann! – user3713569

Verwandte Themen