마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

크롭한 이미지의 이름과 주소를 얻고 싶은데 도와주세요!!!

0 추천

http://programmar.tistory.com/5 여기 사이트에서 이미지를 크롭하고 크롭한 이미지의 Uri를 가지고

(사이트에서는 photoUri를 가지고 비트맵으로 변환했지만 저는 그냥 이미지뷰.setImageUri(photoUri)로 썼습니다.)

이미지의 제목과 주소를 가지고 php를 통해 서버에 업로드를 할려고하는데 크롭 하지 않은 이미지의 이름과 주소는 잘 받아져서 서버에 업로드가 되는데 크롭한 이미지들 에러가 떠서 디버그를 해봣는데

 

public static String getImageNameToUri(Context context,Uri data, int type){                                                         
        String[] proj = {MediaStore.Images.Media.DATA};                                                                                 
        Cursor cursor = context.getContentResolver().query(data, proj, null, null, null);                 
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);                                                           

여기서 진하게 칠해진 곳에서 에러가 뜨더군요....

에러는 

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { dat=content://com.example.kmw.newspaper.provider/storage/emulated/DCIM/Camera/Pro_20180814_173857_438471684.jpg launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } }} to activity {com.example.kmw.newspaper/com.example.kmw.newspaper.ChPicture}: java.lang.IllegalArgumentException: column '_data' does not exist

이렇게 뜹니다. 기존의 이미지들은 잘 되는데 크롭한것만 안됩니다.

예시

기존이미지:content://media/external/images/media/44557

크롭한이미지:content://com.example.kmw.newspaper.provider/storage/emulated/DCIM/Camera/Pro_20180814_173857_438471684.jpg

alsdn1398 (220 포인트) 님이 2018년 8월 14일 질문

2개의 답변

0 추천
오류 로그를 보면 java.lang.IllegalArgumentException: column '_data' does not exist 라고 찍혀있습니다.

이 말은 MediaStore.Images.Media.DATA로 값을 가져왔는데 null이라는 뜻인데,

http://programmar.tistory.com/5 여기에서  크롭은 한뒤에 intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);이렇게 설정합니다. 즉  MediaStore.Images.Media.DATA !=MediaStore.EXTRA_OUTPUT 이기 때문에 오류가 발생한 것입니다. 사용자가 앨범에서 선택했는지 크롭한 것인지 Intent에 설정해서 각각 확인한 뒤에 다르게 값을 가져와야할 것 같습니다.
luxsoft (1,780 포인트) 님이 2018년 8월 20일 답변
0 추천
MediaStore의 content uri가 아닌 경우에는 data가 없을수 있습니다. 위 Uri는 file provider의 uri 이기 때문에 data 컬럼이 없습니다.

1. 위의 uri는 앱에서 FileProvider.getUriForFile로 만들어낸 것이기 때문에 그것을 저장해두고 쓸수 있는 방법이 있구요.

2. 만약 uri에서 file을 만들어내는게 필요하다고 하면 FileProvider 소스의 getFileForUri 코드를 참조해서 uri에서 file 패스를 뽑아재서 사용할수 있습니다.
회색 (21,340 포인트) 님이 2019년 3월 5일 답변
...