2 csh 34 csh_34 于 2013.01.28 17:19 提问

当从gallery中加载图像时,有空指针异常

我用下面的代码从 Gallery中获取图片。给出一个空指针异常并且系统崩溃。我在设备上测试了代码,只要我在gallery中选择一个图像时,系统就崩溃了。哪些地方出错了呢?

AlertDialog.Builder builder = new AlertDialog.Builder(CreatePod.this);
                        builder.setMessage("Select") .setCancelable(false).setPositiveButton("Gallery", new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id)                            {
                                   Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
                                    gallIntent.setType("image/*"); 
                                    startActivityForResult(gallIntent, 10);
                               }
                        })

protected  void onActivityResult(int requestCode, int resultCode, Intent data){
     super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case 10:
            if (resultCode == Activity.RESULT_OK) {
                 Bundle extras = data.getExtras();
                   Bitmap b = (Bitmap) extras.get("data");
                   imgView.setImageBitmap(b);

                String timestamp = Long.toString(System.currentTimeMillis());
                   MediaStore.Images.Media.insertImage(getContentResolver(), b, timestamp, timestamp);
                HttpResponse httpResponse;
                ByteArrayOutputStream bao = new ByteArrayOutputStream();

            b.compress(Bitmap.CompressFormat.JPEG, 100, bao);

            byte [] ba = bao.toByteArray();
            int f = 0;
            String ba1=Base64.encodeToString(ba, f);

2个回答

curie_87
curie_87   2013.01.29 10:01
已采纳

把下面的代码

Bitmap b = (Bitmap) extras.get("data");   
imgView.setImageBitmap(b); 

改成

Uri imageUri = data.getData(); 
Bitmap b = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
imgView.setImageBitmap(b);

我运行过这段代码,是好用的。

clcurie_11
clcurie_11   2013.02.01 10:04

你的错误是照片不能在 extras 中返回,它的 Uri 是在 getData()中.

   switch (requestCode) {
        case 10:
            if (resultCode == Activity.RESULT_OK) {
                Uri bitmapUri = data.getData();

                try {

                    Bitmap b = Media.getBitmap(getContentResolver(), bitmapUri);
                    mImgView.setImageBitmap(b);

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                // ... etc ...
                break;
            }
    }

在 AlertDialogBuilder 中

public void myClickHandler(View clickTarget) {
    Intent gallIntent = new Intent(Intent.ACTION_GET_CONTENT);
    gallIntent.setType("image/*");
    gallIntent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(gallIntent, 10);
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Gallery分页加载和刷新加载
使用Gallery控件实现刷新加载和分页加载,给需要的朋友提供一个参考思路,不要分。
Gallery——Gallery
Gallery-Android15代码
Android学习笔记之Gallery
简介 这是一个非常炫的效果,可以用手指直接拖动图片移动。iPhone曾经凭借这一特效吸引了无数的苹果粉丝,在Android平台上也可以实现这一效果。 要实现这一效果,就必须有一个容器来存放Gallery索要显示的图片。这里使用一个继承自BaseAdapter的派生类来装这些图片。我们需要监听其事件setOnItemClickListener,从而确定当前用户选择了那一张图片。 首先,我们需要
Gallery的整体架构
1.       Gallery主要的功能是实现本地存储器,MTP存储器和网络中的媒体(图像和视频)的浏览, 显示,操作(删除,分享,合成,选择和缩放等)。 下面的图来描述Gallery的职责: Data Manager: 管理数据源,数据源包括: Uri连接数据,本地数据,Gmail同步数据,MTP传输数据,排序后的数据,过滤后的数据,加密数据,
Gallery and Imageswitcher
Android中的Gallery和Imageswitcher组件 是提供图像的缩图和浏览功能。图像是目前手机上很常见的一种资源。
Gallery仿图像集浏览
Gallery仿图像集浏览,自定义View实现
Android Gallery自定义ImageView和Gallery实现图片浏览功能
Android Gallery 自定义ImageView和Gallery实现图片浏览功能,类似Android图库软件,主要实现的功能有:图片左右滑动、放大缩小、放大弹回、缩小弹回。 一开始使用Viewpager实现图片浏览,发现两张图片滑动时没有间隔,看着很丑,最后在别人使用Gallery代码基础上进行修改,实现自己的功能。
Gallery 和probe数据集
Gallery 和probe数据集
Gallery is deprecated:Gallery 过期了怎么办?(一)
前段时间就发现Gallery这个控件被无情的打上了过期这个烙印。当时很好奇,谷歌为什么就让它过期了,不过那个时候项目忙就没有仔细去看了,反正过期了还能用,只是不维护了嘛。今天刚好有点时间就翻了翻android SDK文档: This class was deprecated in API level 16. This widget is no longer supported. Other h
Gallery在不可见情况下,onscroll造成的空指针异常
原本是做个listview,然后listView.addHeaderView(Gallery) 而且header的Gallery要一直循环轮播 这是轮播关键代码 // gallery设置spacing(间隙)后,需scroll比spacing距离稍大的位置,才能onkeydown,否则onkeydown不生效。 gallery.onScroll(null, null, 1, 0); ga