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

Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 6 columns. 에러가 발생하는데..;;

0 추천
아래의 소스가 있는데요..
아래 빨간 글에서 에러가 발생하는데
 
Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 6 columns
 
왜 저 에러가 발생하는지 모르겠습니다.
genymotion 으로 돌리면 발생하지 않는데 제 폰으로 디바이스 연결하면 자꾸 저 에러가 뜹니다
왜 그러는지 혹시 아시는분 있으신가요?
 
 
private File getImageFile(Uri uri) {
 
        Log.d(TAG, uri.getPath());
 
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
 
        Log.d(TAG, "getImageFile : " + uri.toString());
 
 
        Log.d(TAG, "getImageFile >>>>>>>>>>>> 진입");
        Cursor c = getContentResolver().query(mImageCaptureUri, null, null, null, null);
        c.moveToNext();
        String path = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA));
 
        Log.d(TAG, "getImageFile >>>>>>>>>>>> path : " + path);
        Log.d(TAG, "getImageFile >>>>>>>>>>>> 종료");
 
        File file = new File(path);
/////////////////
 
 
 
 
    Process: com.ksh.webservertest, PID: 15011
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:23406 flg=0x43 }} to activity {com.ksh.webservertest/com.ksh.webservertest.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3384)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3427)
            at android.app.ActivityThread.access$1300(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1248)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
            at android.database.CursorWindow.nativeGetString(Native Method)
            at android.database.CursorWindow.getString(CursorWindow.java:434)
            at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
            at android.database.CursorWrapper.getString(CursorWrapper.java:114)
            at com.ksh.webservertest.MainActivity.getImageFile(MainActivity.java:149)
            at com.ksh.webservertest.MainActivity.onActivityResult(MainActivity.java:122)
            at android.app.Activity.dispatchActivityResult(Activity.java:5467)

 

afgman4 (210 포인트) 님이 2015년 5월 18일 질문

1개의 답변

0 추천

Cursor c = getContentResolver().query(mImageCaptureUri, null, null, null, null); 

>>

Cursor c = getContentResolver().query(mImageCaptureUri, filePathColumn, null, null, null); 
 
로 바꿔보세요. 
익명사용자 님이 2015년 5월 18일 답변
그렇게 하니 에러는 안나는데.. null 이 떨어지네요..
이상하네요.. 갤러리에서 사진을 선택해서 그 경로는 가져오는 부분인데
왜 비었을까요? ㅡㅡ;; 헐헐..;;
mImageCaptureUri는 어디서 가져오시나요?

왜 매개변수 getImageFile(Uri uri)의 uri를 안쓰시고 mImageCaptureUri를 사용하시나요?
네 매개변수에서 안쓰고 전역변수에 선언한놈을 쓰다가..;; 다시 매개변수에 선언한 놈을 가져와 쓰고 있습니다 그래도 에러가..ㅠㅜ 근데 전역변수에 선언한놈을 쓸때도 값 세팅은 된 상태였구요
String[] proj = { MediaStore.Images.Media.DATA };

CursorLoader cursorLoader = new CursorLoader(this, uri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);

File file = new File(path);

위에 코드로 변경해서 사용해보세요.
아 답변 감사합니다. 문제를 해결했습니다
startActivityForResult(intent, GALLERY_INTENT_CALLED);
이놈때문에 인거 같아요
startActivityForResult(intent, PICK_FROM_ALBUM);
일케 하니까 에러가 발생안하고 잘 가지고 오더라구요..; 혹시 왜 인지 아시나요?? 제가 초보라서..;;
PICK_FROM_ALBUM는 사용자 정의 requestCode 인데 에러가 발생한다구요?
무슨 에러가 발생했는지 알 수 있을까요?
아..;; 익명사용자님.. 답변감사하구요
아래의 소스에 주석된 부분이 이전소스고.. 주석 밑에 부분이 이후 에러 수정 소스에요
왜 그런지는 모르겠습니다.
//        Log.i(TAG, "doTakeAlbumAction()");
//        // 앨범 호출
//        Intent intent;// = new Intent(Intent.ACTION_PICK);
//        //intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
//
////        startActivityForResult(intent, PICK_FROM_ALBUM);
//
//        if (Build.VERSION.SDK_INT <19){
//            intent = new Intent();
//            intent.setType("image/*");
//            intent.setAction(Intent.ACTION_GET_CONTENT);
//            startActivityForResult(intent, GALLERY_INTENT_CALLED);
//        } else {
//            intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
//            intent.addCategory(Intent.CATEGORY_OPENABLE);
//            intent.setType("image/*");
//            startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED);
//        }

        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
        // 특정기기에서 사진을 저장못하는 문제가 있어 다음을 주석처리 합니다.
        // intent.putExtra("return-data", true);
        startActivityForResult(intent, PICK_FROM_ALBUM);
...