【发布时间】:2014-10-04 07:32:37
【问题描述】:
用户从图库中选择图片后,图片在 imageview imgview 中正确显示。代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == Activity.RESULT_OK)
{
adapter.clear();
single_path = data.getStringExtra("single_path");
imageLoader.displayImage("file://" + single_path, imgview);
image_picked = true;
}
}
public void Upload_new_image()
{
if (image_picked == true)
{
String imgFilePath = "file://" + single_path;
Bitmap bitmap = BitmapFactory.decodeFile(""+imgFilePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); // Line 156: NPE
byte[] image = stream.toByteArray();
ParseFile file = new ParseFile("upload.png", image);
file.saveInBackground();
ParseObject imgupload = new ParseObject("photo_database");
imgupload.saveInBackground();
Constants.custom_toast(this, "Image uploaded", "");
}
else
{
Constants.custom_toast(this, "No image is picked!", "");
}
Logcat:
10-04 15:18:31.926: W/dalvikvm(20254): threadid=1: thread exiting with uncaught exception (group=0x41c77700)
10-04 15:18:31.931: E/AndroidRuntime(20254): FATAL EXCEPTION: main
10-04 15:18:31.931: E/AndroidRuntime(20254): java.lang.NullPointerException
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.abc.app.activity.User_pick_image.Upload_new_image(User_pick_image.java:156)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.abc.app.activity.User_pick_image.onOptionsItemSelected(User_pick_image.java:93)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.app.Activity.onMenuItemSelected(Activity.java:2640)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:372)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1171)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:630)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:200)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.view.View.performClick(View.java:4475)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.view.View$PerformClick.run(View.java:18786)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.os.Handler.handleCallback(Handler.java:730)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.os.Looper.loop(Looper.java:137)
10-04 15:18:31.931: E/AndroidRuntime(20254): at android.app.ActivityThread.main(ActivityThread.java:5493)
10-04 15:18:31.931: E/AndroidRuntime(20254): at java.lang.reflect.Method.invokeNative(Native Method)
10-04 15:18:31.931: E/AndroidRuntime(20254): at java.lang.reflect.Method.invoke(Method.java:525)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
10-04 15:18:31.931: E/AndroidRuntime(20254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
10-04 15:18:31.931: E/AndroidRuntime(20254): at dalvik.system.NativeStart.main(Native Method)
问题:
虽然通过 imagerLoad.displayImage 方法可以在imgview 中正确显示图像,但当按下通过Upload_new_image() 方法上传图像时,无法获取到相同文件的相同文件链接并出现错误,如日志猫。
信息:
我通过挑选不同的图像获得了single_path的值,完整的值格式如下:
/storage/emulated/0/Pictures/Screenshots/Screenshot_xxx.png
如何解决?
非常感谢!
【问题讨论】:
-
第 156 行是哪个语句?哪个指针为空?请告诉该功能应该做什么。你没说。
-
上面代码中标记的
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);行 -
我怎么看出来的?您必须滚动才能看到它。
-
忽略这个。正在检查 atm 的东西。
-
去掉开头的“file://”,试试 File file = new File(path);然后是 file.exists() 或 file.isFile(),看看它们返回什么。还要验证文件路径是否具有图像扩展名,这些是确保 BitmapFactory.decodeFile 100% 工作的要求。如果上面返回 false,那么可能是路径有问题。
标签: android file bitmap bitmapfactory