我的图像存储在SD卡上。
这是路径。
file:///mnt/sdcard/2014-04-06%2010%3A49%3A20.jpg
这些图像路径存储在sqlite db中。我有一个方法将这些路径作为列表返回。
我制作了一个带有gridview的布局文件,用于显示图像的活动。 我还制作了带有图像视图小部件的布局文件。我想创建一个baseadapter来膨胀这个布局文件。 这里列出了主要活动。
<
?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/grid_view"
android:numColumns="auto_fit"
android:columnWidth="90dp"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:gravity="center"
android:stretchMode="columnWidth"
>
</GridView>
这是baseadapter布局文件的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/item_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="10dp"/>
</LinearLayout
以下是主要图片活动的代码
public class ImagesActivity extends Activity {
private ImagesAdapter adapter;
List<Incidentmages> images= new ArrayList<Incidentmages>();
DBHelperClass db;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
db= new DBHelperClass(this);
setContentView(R.layout.incident_images);
Intent i=getIntent();
String myid=i.getStringExtra("IncidentID");
Log.e("id", myid);
int _id= Integer.parseInt(myid);
// get image paths in a list
images=db.GetIncidentImages(_id);
adapter= new ImagesAdapter(this,R.layout.images_display,images);
GridView gridView = (GridView) findViewById(R.id.grid_view);
// Instance of ImageAdapter Class
gridView.setAdapter(adapter);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
db.close();
super.onStop();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
db.close();
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
db.close();
super.onDestroy();
}
}
以下是baseadapter的代码
public class ImagesAdapter extends BaseAdapter {
private Context context1;
int layoutid;
List<Incidentmages> images= new ArrayList<Incidentmages>();
public ImagesAdapter(Context context, int resourcelayouteid,
List<Incidentmages> images
) {
this.context1=context;
this.layoutid=resourcelayouteid;
this.images=images;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return images.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return images.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
View row = view;
RecordHolder holder = null;
if (row == null) {
LayoutInflater inflater=
LayoutInflater.from(parent.getContext());
row =inflater.inflate(layoutid,parent,false);
holder = new RecordHolder();
holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag(); }
Incidentmages d= (Incidentmages)images.get(position);
String path= d.getPath();
String mypath= path.substring(5,path.length());
String FKID= Integer.toString(d.getIncident_id());
Log.e("Imageadapter", path);
Log.e("FK",FKID);
Bitmap bm= BitmapFactory.decodeFile(mypath);
holder.imageItem.setImageBitmap(bm);
return row;
}
static class RecordHolder {
ImageView imageItem;
}
}
你可以看到我使用BitmapFactory设置图像位图....
我得到的字符串看起来像
///mnt/sdcard/2014-04-06%2010%3A49%3A20.jpg
现在问题是图像不显示。我得到一个空白的屏幕。
我的代码有什么问题吗?
也许问题是我走的路?
以下是我从URI
获取路径字符串的方法 {
SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date mydate = new Date();
String imagenumber= fm.format(mydate) + ".jpg";
File file = new File(Environment.getExternalStorageDirectory(),
imagenumber);
Uri outputFileUri = Uri.fromFile(file);
Intent picintent= new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
picintent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(picintent,TAKE_PHOTO);
myPaths.add(outputFileUri.toString());
}
答案 0 :(得分:0)
你需要逃离空间。尝试更换&#34; &#34;用&#34; \&#34;
mypath.replace("%20", "\\ ");
编辑:第二个arg中应该有两个反斜杠。一个人在减价时消耗了。我纠正了它。
试试,这应该可行。
编辑:您的文件路径中有%3A
。不确定,请用=
替换它们,您的图像路径应该有效。
mypath.replace("%3A","=")
的SO问题中引用
答案 1 :(得分:0)
问题在于我正在拯救路径!...
我已添加代码以在捕获图像时获取文件路径。
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (resultData != null) {
String[] projection = { MediaStore.Images.Media.DATA };
@SuppressWarnings("deprecation")
Cursor cursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null, null);
int column_index_data = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToLast();
String imagePath = cursor.getString(column_index_data);
// add image path
myPaths.add(imagePath);
}