So verwende ich Retrofit, um Bilder auf unseren Server hochzuladen, und verwende Galerieauswahl, um das Bild auszuwählen. Ich versuche, den Pfad des Bildes zu erhalten, weil uri.getPath() Datei nicht gefunden Exception zurückgibt. Ich habe buchstäblich fast jeden stackoverflow-Artikel zu diesem Thema gesehen und habe immer noch keine Antwort. Der folgende Code, den ich habe, ist ähnlich wie alles, was ich online gesehen habe, und es gibt IMMER null zurück, und ich habe keine Ahnung warum. BITTE HILFEDer Pfad zum URI ist immer null?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
try {
android.net.Uri selectedImage = data.getData();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage);
// Log.d(TAG, String.valueOf(bitmap));
ImageView imageView = (ImageView) findViewById(R.id.expandedProfilePic);
imageView.setImageBitmap(bitmap);
String[] filePathColumn = {MediaStore.Images.Media.DATA};
android.database.Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor == null)
return;
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
// is always null
System.out.println("FILE PATH " + filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ich benutze ACTION_GET_CONTENT, auch ich habe Ihre anderen Stack-Überläufe, aber ich verstehe immer noch nicht, wie die Verwendung von Inputstream mir den Pfad des Fotos geben wird. Ich muss den Pfad angeben, um mit Retrofit hochladen zu können. – thatsnifty
@thatsnifty: "Ich verstehe immer noch nicht, wie die Verwendung von inputstream mir den Weg des Fotos gibt" - weil ** es keinen Weg zum Foto gibt **, zumindest bis du eine Kopie dieses Inhalts machst , wie ich im letzten Absatz der Antwort behandle. Was lässt Sie glauben, dass das Foto immer eine Datei auf dem lokalen Dateisystem sein wird? Die Aktion lautet "ACTION_GET_CONTENT", nicht "ACTION_GET_FILE". Wenn Sie nicht damit umgehen können, dass ACTION_GET_CONTENT Dinge zurückgibt, die keine Dateien sind, verwenden Sie nicht mehr ACTION_GET_CONTENT. – CommonsWare
ok, also hat es ein paar Tage gedauert, aber ich habe es endlich bekommen! Ich benutzte ACTION_PICK, inputstream und contentresolver. Ihre Antwort hat mir sehr geholfen! Und wer das gleiche Problem hat, ist auch ein gutes Beispiel: [link] https://inducesmile.com/android/android-upload-image-to-server-using-retrofit-2/ – thatsnifty