У меня есть приложение, которое имеет функцию, которая позволяет пользователю выбирать изображение из галереи. Вот код для этого, что:Выбор изображения из галереи на Nexus 5 (Android 5.1.1), возвращающий нуль, работающий на других устройствах
@OnClick(R.id.imageView_fragmentUploadLayout_uploadedArt)
public void setUploadedArtImageView() {
//startActivityForResult(new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI), GET_FROM_GALLERY);
Intent intent = new Intent();
// Show only images, no videos or anything else
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// Always show the chooser (if there are multiple options available)
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GET_FROM_GALLERY);
}
И метод onActivityResult:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Detects request codes
if(requestCode == GET_FROM_GALLERY && resultCode == Activity.RESULT_OK && data != null) {
selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
file = new File(selectedImagePath);
//ParseFile parseImage = new ParseFile();
Picasso.with(getActivity())
.load(selectedImageUri.toString())
.resize(500, 500)
.centerCrop()
.noPlaceholder()
.into(uploadedArtImageView);
uploadedArtImageViewPlaceHolder.setVisibility(View.GONE);
ImageResizer.resize(file, 640, 480, ResizeMode.FIT_EXACT);
}
}
метод GetPath:
public String getPath(Uri uri) {
// just some safety built in
if(uri == null) {
// TODO perform some logging or show user feedback
return null;
}
// try to retrieve the image from the media store first
// this will only work for images selected from gallery
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null);
if(cursor != null){
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
// this is our fallback here
return uri.getPath();
}
Если я проверить это на моем Samsung S2 работает, (в настоящее время на Cyanogen Mod, Android 4.0.4), но если я тестирую его на Nexus 5 (Android 5.1.1), он возвращает исключение с нулевым указателем.
ПРИМЕЧАНИЕ
Я пробовал разные приложения: Я думал, что получить изображение из галереи с помощью Google Фото, возможно, причиной проблемы, но я установил его на моем S2, и она работает.
Вот StackTrace:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=131075, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:25147 flg=0x1 }} to activity {com.entu.artapp/com.entu.artapp.activity.FragmentManager}: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:3574)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference
at java.io.File.fixSlashes(File.java:185)
at java.io.File.<init>(File.java:134)
at com.entu.artapp.fragments.UploadPictureFragment.onActivityResult(UploadPictureFragment.java:363)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:163)
at android.app.Activity.dispatchActivityResult(Activity.java:6192)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3570)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Можете ли вы помочь мне с этой проблемой?
Заранее благодарим за ура!
Проверьте это. http://stackoverflow.com/a/30576188 – siriscac