所以我使用改造上傳圖像到我們的服務器,並使用畫廊選擇器來選擇圖像。我試圖獲取圖像的路徑,因爲uri.getPath()返回文件未找到異常。我幾乎看到了關於這個主題的每一個stackoverflow文章,但仍然沒有答案。我擁有的以下代碼與我在網上看到的所有內容相似,它總是返回null,我不知道爲什麼。請幫助獲取URI的路徑始終爲空?
@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();
}
}
}
即時通訊使用ACTION_GET_CONTENT,我也經歷了你的其他堆棧溢出,但我仍然不明白如何使用inputstream將給我的照片路徑。我需要路徑才能通過改造上傳。 – thatsnifty
@thatsnifty:「我仍然不明白如何使用inputstream給我照片的路徑」 - 這是因爲**沒有照片的路徑**,至少在您複製該內容之前,正如我在答案的最後一段所述。是什麼讓你認爲照片永遠是本地文件系統上的文件?該操作是「ACTION_GET_CONTENT」,而不是「ACTION_GET_FILE」。如果你無法處理'ACTION_GET_CONTENT'可能返回不是文件的事實,請停止使用'ACTION_GET_CONTENT'。 – CommonsWare
好吧,所以花了幾天時間,但我終於明白了!我結束了使用ACTION_PICK,inputstream和contentresolver。你的回答真的有幫助!無論誰遇到同樣的問題,這也是一個很好的例子:[link] https://inducesmile.com/android/android-upload-image-to-server-using-retrofit-2/ – thatsnifty