【发布时间】:2014-03-17 19:35:30
【问题描述】:
我 3 天前现在正在寻找答案,但没有找到满意的答案。 我创建了一个列表视图来用图片和文本填充它,图像保存在 sqlite 数据库中的方式和图像在手机的 sd 卡中,但不是数据库中的所有行都有图像路径,所以我我放置了一个默认图像,但问题是即使是路径的图像,也不会返回到这个图像,遵循我的适配器代码如下:
public class AgendaListAdapter extends ArrayAdapter<Agenda> {
private LayoutInflater inflater;
private List<Agenda> lista;
private Agenda agenda;
int resources;
//constructor
public AgendaListAdapter(Context context, int resource, List<Agenda> lista){
super(context, resource, lista);
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.resources = resource;
this.lista = lista;
}
@Override
public int getCount() {
return lista.size();
}
@Override
public Agenda getItem(int position) {
return lista.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
agenda = lista.get(position);
//cria uma referencia para viewHolder
//creates a reference to
ViewHolder viewHolder;
//verifica se a view esta sendo reusada ou não
//verifies that the view is being reused or not
if(convertView == null){
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.linha_listar_telefones, null);
viewHolder.mNome = (TextView) convertView.findViewById(R.id.nome);
viewHolder.mImagem = (ImageView) convertView.findViewById(R.id.listar_contato_imagem);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
if(agenda != null){
if(viewHolder.mNome != null){
viewHolder.mNome.setText(agenda.nome);
}
if(viewHolder.mImagem != null){
viewHolder.mImagem.setTag(lista.get(position));
Log.w("Livro", "Positiom: "+position);
Log.e("Livro", "Viewhol.imagem não é nulo "+viewHolder.mImagem);
new loadImageTask(viewHolder.mImagem).execute();
}
}
return convertView;
}
private static class ViewHolder{
protected TextView mNome;
protected ImageView mImagem;
}
Bitmap b = null;
private class loadImageTask extends AsyncTask<Agenda, Void, Bitmap>{
private ImageView imv;
private String path;
public loadImageTask(ImageView imv) {
this.imv = imv;
this.path = agenda.caminho_imagem;
}
@Override
protected Bitmap doInBackground(Agenda... params) {
Log.w("Livro", "path: "+path);
File file = new File(
Environment.getExternalStorageDirectory().getAbsolutePath() + path);
if(file.exists()){
b = BitmapFactory.decodeFile(file.getAbsolutePath());
}
return b;
}
@Override
protected void onPostExecute(Bitmap result) {
if(result != null && imv != null){
Log.i("Livro", "Result do onPostExcute não é nulo: "+result);
imv.setVisibility(View.VISIBLE);
imv.setImageBitmap(result);
}else{
Log.i("Livro", "Result do onPostExcute é nulo: "+result);
imv.setImageResource(R.drawable.foto_pessoa);
}
}
}
}
在返回此的 logcat 路径中:content ://media/external/images/media/16
变量文件返回以下结果:/ storage/emulated/sdcard0content ://media/external/images/media/16
我知道这个错误文件的结果,但是会转换成uri路径并将uri传递给文件吗?
谢谢大家!!!
【问题讨论】:
标签: android android-listview android-asynctask android-imageview android-adapter