我对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类,所以我想尝试使用错误的图像。
答案 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上的联系人照片)。