2017-02-06 3 views
0

В моем фрагменте я открываю галерею. но я хочу знать, что это реальный путь к моей картине, что я имею selected.I получил мое изображение URI в onActivityResult, как это:getContext(). GetContentResolver(). Query (NullPointerException)

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == SELECT_FILE) { 
      onSelectFromGalleryResult(data); 
     } 
    } 
} 


    public void onSelectFromGalleryResult(Intent data) { 
    if (data != null) { 
     bm = null; 

     try { 
      selectedImageUri = data.getData(); 
      bm = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     Log.d(TAG, "selectedImageUri " + selectedImageUri); 

     fragmentEditPicture.setImageBitmap(bm); 

     File finalFile = new File(getRealPathFromURI(selectedImageUri)); 
     Log.d("===>", "getRealPathFromURI: " + finalFile); 
    } 

} 

и я получил свой образ URI. Я нашел в этом этом методе. в этом методе getRealPathFromURI(selectedImageUri) я прошел URI в метод реализации .complete этого метода:

public String getRealPathFromURI(Uri uri) { 
    Cursor cursor = getContext().getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
     idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 

    return cursor.getString(idx); 
} 

, но когда я выбираю мой рис я получил эту ошибку:

FATAL EXCEPTION: main 
                       java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65536, result=-1, data=Intent { dat=file:///mnt/sdcard/Download/139175_(2560x1600).JPG }} to activity {com.example.sayres.myapplication7/com.example.sayres.myapplication7.mvp.view.profile.ProfileActivity}: java.lang.NullPointerException 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
                        at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
                        at android.os.Handler.dispatchMessage(Handler.java:99) 
                        at android.os.Looper.loop(Looper.java:137) 
                        at android.app.ActivityThread.main(ActivityThread.java:4745) 
                        at java.lang.reflect.Method.invokeNative(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:511) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                        at dalvik.system.NativeStart.main(Native Method) 
                       Caused by: java.lang.NullPointerException 
                        at com.example.sayres.myapplication7.mvp.view.profile.EditProfileFragment.onSelectFromGalleryResult(EditProfileFragment.java:159) 
                        at com.example.sayres.myapplication7.mvp.view.profile.EditProfileFragment.onActivityResult(EditProfileFragment.java:136) 
                        at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:176) 
                        at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
                        at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
                        at android.os.Handler.dispatchMessage(Handler.java:99) 
                        at android.os.Looper.loop(Looper.java:137) 
                        at android.app.ActivityThread.main(ActivityThread.java:4745) 
                        at java.lang.reflect.Method.invokeNative(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:511) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                        at dalvik.system.NativeStart.main(Native Method) 

ошибка находится в этой линии как вы можете видеть, что это мой URI Адрес: dat=file:///mnt/sdcard/Download/139175_(2560x1600).JPG

но что я получил Ошибка?

+0

, что вам нужно, что путь? – pskink

+0

Я хочу показать тост где изображение, и я хочу знать, как я могу это сделать –

+0

после вызова метода 'query' вызывать' DatabaseUtils.dumpCursor' и смотреть 'logcat', что вы видите? – pskink

ответ

0

Введите код onActivityResult правильно. Поменяйте шаг для получения данных, сначала проверьте действительные requestCode, если код действителен, проверьте responce. Вы делаете это прямо противоположно.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data){ 

    if (requestCode == SELECT_FILE) { 
     if (resultCode == Activity.RESULT_OK) { 
      onSelectFromGalleryResult(data); 
     } 
    } 
} 

А внутри метода:

public void onSelectFromGalleryResult(Intent data) { 
if (data != null) { 
    final Bitmap bm; 

    try { 
     selectedImageUri = data.getData(); 
     bm = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImageUri); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    ....... 
    ..... 
+0

Бадди, я не хочу конвертировать uri в растровое изображение. Ваш код такой же. Я хочу получить адрес reall из моих изображений и где мой код ошибочен –

0

Мой код работает (я комментировал 'ЭТО TOAST ВАМ'):

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // Here we need to check if the activity that was triggers was the Image Gallery. 
    // If it is the requestCode will match the LOAD_IMAGE_RESULTS value. 
    // If the resultCode is RESULT_OK and there is some data we know that an image was picked. 
    if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK && data != null) { 
     // Let's read picked image data - its URI 
     Uri pickedImage = data.getData(); 
     // Let's read picked image path using content resolver 
     String[] filePath = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
     cursor.moveToFirst(); 
     String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 

//THIS IS THE TOAST YOU NEED 
     Toast.makeText(this, "" + imagePath, Toast.LENGTH_SHORT).show(); 

BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); 
     img.setImageBitmap(bitmap); 

     // Do something with the bitmap 


     // At the end remember to close the cursor or you will end with the RuntimeException! 
     cursor.close(); 
    } 
    } 
Смежные вопросы