Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在对话框中显示库中图像uri的缩略图_Android - Fatal编程技术网

Android 在对话框中显示库中图像uri的缩略图

Android 在对话框中显示库中图像uri的缩略图,android,Android,我在gallery中挑选图像并将其列在listview中。我想做的是,当我在listview中单击图像uri项时,它的缩略图就会出现。但无论何时单击该项,对话框中都不会显示任何内容。纯白色 public class Fragment1 extends Fragment implements OnClickListener { ListView lv; ArrayList<Uri> array_list = new ArrayList<Uri>();

我在gallery中挑选图像并将其列在listview中。我想做的是,当我在listview中单击图像uri项时,它的缩略图就会出现。但无论何时单击该项,对话框中都不会显示任何内容。纯白色

public class Fragment1 extends Fragment implements OnClickListener {

    ListView lv;
    ArrayList<Uri> array_list = new ArrayList<Uri>();
    ArrayAdapter<Uri> array_adapter;

    final int RQS_LOADIMAGE = 0;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment, container, false); 

        ImageButton b = (ImageButton) v.findViewById(R.id.button_ai);
        b.setOnClickListener(this);

        array_adapter = new ArrayAdapter<Uri>(getActivity(), R.layout.spinner_style, array_list);
        lv = (ListView) v.findViewById(R.id.list_ai);
        lv.setAdapter(array_adapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 

                AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());  

                Bitmap bmp = BitmapFactory.decodeFile(array_list.get(position).toString()); 

                ImageView thumbView = new ImageView(getActivity());
                thumbView.setImageBitmap(bmp);
                LinearLayout layout = new LinearLayout(getActivity());
                layout.setOrientation(LinearLayout.VERTICAL);
                layout.addView(thumbView);

                adb.setView(layout);
                adb.show(); 
            }
        });
        return v;
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) 
        {           
            case R.id.button_ai:
                Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(intent, RQS_LOADIMAGE);
            break;
        }           
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

      if (requestCode == RQS_LOADIMAGE) {

          if(resultCode == MainActivity.RESULT_OK) {
            Uri imageUri = data.getData();
            array_list.add(imageUri);
            array_adapter.notifyDataSetChanged();
          }
      }
    }

}
您不应该将decodeFile方法与Uri一起使用;而是使用MediaStore.Images.Media类中的静态getBitmap helper方法加载位图

编辑:

此外,如果您想显示缩略图,您应该缩小它的比例以提高性能和更好的内存占用。您可以从中了解如何做到这一点。通过使用openInputStream方法从ContentResolver打开InputSteam,并调用BitmapFactory.decodeStream,可以提供BitmapFactory.Options


此外,不应从主线程加载这些位图;此逻辑应在AsyncTask或Loader实现中移动。

2个问题:1-您是否检查此代码是否在活动中而不是在片段中工作?2-你有没有检查你是否得到了URI,如果是,就把它贴在这里。。您可以尝试在uri之前添加file://文件string@matan大汉-1-不。2-是的。它在我的列表视图中显示为content://media/external/images/media/3971 我将发布什么?截图?我不能在这里张贴照片。我需要更多的名声。你的意思是字符串s2=file://+bmp?我建议使用毕加索图像加载器,它可以解决@corsair992提到的内存问题,也可以解决在没有openInputStream方法的情况下加载图像的问题。。了解更多信息,这是一个简单的方法,应该适合您:Picasso.withgetActivity.loadarray\u list.getposition.toString.resize50,50.centerCrop。intothumbView@MatanDahan-谢谢你,伙计。我会试着用它,像这样?Uri imageUri=data.getData;位图位图=MediaStore.Images.Media.getBitmapthis.getContentResolver,imageUri;为什么我收到一个错误,说类型Fragment1的方法getContentResolver未定义?@user3012327:抱歉,您需要将其更改为getActivity.getContentResolver.Thank。它正在工作。还有一个问题,如果我将它设置为getActivity.getContentResolver,我会收到一个错误,说未处理的异常类型FileNotFoundException和IOException eclipse给我的解决方案是用try-and-catch围绕它。我这样做了,它起作用了。我的问题是,为什么我会遇到这个错误,并且需要用try-and-catch来包围它?@user3012327:您需要处理这些异常,因为它们可以通过getBitmap方法抛出。如果Uri未指向有效的现有文件路径,将引发FileNotFoundException;如果关闭文件的InputStream时发生错误,将引发IOException。在您的案例中,它们实际上不应该出现,但是由于getBitmap方法声明它可以抛出这些异常,编译器会强制您处理它们。