Android 未能传递结果信息-从库中获取图像
这个问题已经被问过很多次了,但似乎没有人能回答我的问题。我有一个应用程序,允许用户。拍摄一张照片并上传或上传。从库中选择 我已经在三星s4/s3和LG nexus 4这三款设备上进行了测试。它工作得很好,还没能把它撞坏 然而,我通过crashlytics收到通知,说它在摩托罗拉moto g上坠毁了 这是我的密码:Android 未能传递结果信息-从库中获取图像,android,photo-gallery,onactivityresult,Android,Photo Gallery,Onactivityresult,这个问题已经被问过很多次了,但似乎没有人能回答我的问题。我有一个应用程序,允许用户。拍摄一张照片并上传或上传。从库中选择 我已经在三星s4/s3和LG nexus 4这三款设备上进行了测试。它工作得很好,还没能把它撞坏 然而,我通过crashlytics收到通知,说它在摩托罗拉moto g上坠毁了 这是我的密码: private void launchImageGallery(){ //Toast.makeText(getActivity(), "Gallery Launched
private void launchImageGallery(){
//Toast.makeText(getActivity(), "Gallery Launched", Toast.LENGTH_LONG).show();
Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(gallery, IMAGE_PICKER_SELECT);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_PICKER_SELECT && resultCode == Activity.RESULT_OK) {
Uri selectedImageUri = data.getData();
String imagePath = getPath(selectedImageUri);
BitmapFactory.Options options = null;
options = new BitmapFactory.Options();
options.inSampleSize = 2;
Matrix rotationMatrix = new Matrix();
rotationMatrix.postRotate(90.0f);
Bitmap bitty = decodeSampledBitmapFromPath(imagePath, 300, 300);
Bitmap rotatedImage = Bitmap.createBitmap(bitty, 0, 0, bitty.getWidth(), bitty.getHeight(), rotationMatrix, true);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
fromGallery = true;
BitmapDrawable bmp = null;
Log.i("GALLERY BITMAP SIZE: ", String.valueOf((sizeOfBitmap(bitty))/1000)+ " kb");
// normal portrait: 0
// normal landscape: 90
// upside-down portrait: 180
// upside-down landscape: 270
// image not found: -1
if(getOrientation(getActivity(), selectedImageUri)!=90){
bmp = new BitmapDrawable(getResources(),bitty);
//galleryImage.setImageBitmap(bitty);
bitty.compress(Bitmap.CompressFormat.PNG, 100, stream);
}else{
bmp = new BitmapDrawable(getResources(),rotatedImage);
//galleryImage.setImageBitmap(rotatedImage);
rotatedImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
}
if(Build.VERSION.SDK_INT>14){
galleryImage.setBackground(bmp);
}else{
galleryImage.setBackgroundDrawable(bmp);
}
snapPic.setText(getString(R.string.rate_this_beer));
image = stream.toByteArray();
beerDetailsAnimate();
}
}
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().getContentResolver().query(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();
}
我从坠机事件中得到的日志如下:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=132071, result=-1, data=Intent { dat=content://com.google.android.apps.photos.content/0/https://lh6.googleusercontent.com/poyCKb42_JLYFjZbndpgDzRBr7gEdfX8hNc4Dy6utJs=s0-d flg=0x1 }} to activity {com.purpledecks.bottomsup/com.purpledecks.bottomsup.activities.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:3432)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3475)
at android.app.ActivityThread.access$1300(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
at com.purpledecks.bottomsup.fragments.Beer_Camera_fragment.onActivityResult(Beer_Camera_fragment.java:1077)
at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:167)
at android.app.Activity.dispatchActivityResult(Activity.java:5446)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3428)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3475)
at android.app.ActivityThread.access$1300(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(NativeStart.java)
不幸的是,我无法在此设备上进行测试,所以我不确定哪里出了问题,有人能看到问题吗?您给出的代码中哪一行是Beer\u Camera\u fragment.java,第1077行?这就是NullPointerException发生的地方,对吧?一个简单的小学生错误。在第1077行,我有一个布尔值来说明它是否取自图库,如果调用它,它将进行全局初始化和重新初始化,但是,根据用户使用的路径,这可能会导致NPE…感谢您的帮助..您帮助我从树上看到了树林!