获取gridview中显示的图像的图像URI

时间:2011-06-14 09:18:18

标签: android gridview

我对android很新,我被困在这里。我有一个gridview,它显示我的SD卡中的图像,以及一个复选框,每个图像用于多个选择。现在选择之后,我想将图像发送到多部分http请求中的servlet。我认为(纠正我,如果我错了)我需要图像URI来做到这一点但我无法在选择菜单项后获取它们。这是代码

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case R.id.sendPics:
        // TODO - add code to get and send pics
        GridView grid = (GridView) findViewById(R.id.imageGrid);
        ImageAdapter imageAdapter = (ImageAdapter) (grid.getAdapter());

        for (int i = 0; i < grid.getChildCount(); i++)
        {
            Images im = (Images) imageAdapter.getItem(i);
            View view = grid.getChildAt(i);
            CheckBox cb = (CheckBox) view.findViewById(R.id.checkbox);
            // ImageView iv = (ImageView) view.findViewById(R.id.image);

            if (cb.isChecked())
            {
                Log.d(TAG, ">>>>>>>>>>checked check box found<<<<<<<<<<");

                // TODO get the image path hre to send as a multipart http request
            }
        }

        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

我得到图像适配器来获取此帖子android How to get image path from GridView through onItemClick listener的加载图像,但我无法在我的项目中找到任何LoadedImage类,所以完全卡住了。任何帮助将不胜感激。

编辑: 图像im =(图像)imageAdapter.getItem(i); 在这一行中我可以找到LoadedImage类,所以我想尝试使用错误的图像。

2 个答案:

答案 0 :(得分:3)

使用以下逻辑获取图库中存在的所有图像的路径。创建自己的PhotoGrid以显示所有图像。将图像的路径存储在arraylist中。通过从arraylist中取出uri来显示gridview中的图像。

以下arraylist包含sd卡中所有图像的路径。 OnItemclick你将获得点击的位置,因此从arraylist你可以得到图像的路径。

ArrayList<String> listOfAllImages = new ArrayList<String>();
String absolutePathOfImage = null;
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

            String[] projection = { MediaColumns.DATA,
                    MediaColumns.DISPLAY_NAME };

            cursor = activity.managedQuery(uri, projection, null, null, null);
            column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index);
listOfAllImages.add(absolutePathOfImage);
}

谢谢Deepak

答案 1 :(得分:0)

你实际上必须获得sd卡上文件的路径。如果你在图像视图中加载它你可能在适配器中的对象中(如调用im.getImagePath()或者在你的情况下获取路径),之后你可以构建一个Uri,如果你需要它,或者你可以使用文件部分进行分段上传,可以从图像路径创建。从uri你可以打开一个流,并有一个用于分段上传的streamPart。无论哪种效果更好都有相同的结果。虽然使用Uri可以获得通常无法通过路径访问的图像(例如存储在手机内存而不是sdCard上的联系人照片)。