android ListView 异步加载 网络图片 我想用Bitmap做 代码如下:希望大家帮忙找找问题原因 谢谢!

//onCreat()@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(saved... //onCreat()
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

listview = (ListView)findViewById(R.id.listView);

data = new ArrayList<Map<String,Object>>();
List<Videos> videos = VideoService.getDateTest();
if(videos!=null)
{
for(Videos video : videos)
{
Map<String,Object> items = new HashMap<String, Object>();
items.put("id", video.getId());
items.put("tvname", video.getName());
items.put("image", video.getImagelink());
items.put("playlink", video.getPlaylink());
data.add(items);
}
}
MyAdapter adapter = new MyAdapter(getApplicationContext());//自己写的adapter继承BaseAdapter
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
String playlink = data.get(position).get("playlink").toString();
Intent intent = new Intent();
intent.setClass(MainActivity.this, VideoPlayActivity.class);
intent.putExtra("playlink", playlink);
startActivity(intent);
}
});
//MyAdapter
private class MyAdapter extends BaseAdapter{
private LayoutInflater falter;
private TextView tvname;
private ImageView image;
public MyAdapter(Context context){
this.falter = LayoutInflater.from(context);
};
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = falter.inflate(R.layout.items, null);
//Log.i("result", data.get(position).get("image").toString());
MyThread my = new MyThread(data.get(position).get("image").toString());
new Thread(my).start();//开启线程
image = (ImageView)convertView.findViewById(R.id.imageview);
tvname = (TextView)convertView.findViewById(R.id.tvname);
tvname.setText(data.get(position).get("tvname").toString());
handler = new Handler(){//问题应该就在这里 最后加载出来的只是第一个图片 而且是最后一项加载

@Override
public void handleMessage(Message msg) {
bitmap = (Bitmap)msg.obj;
if(bitmap == null)
{
Log.i("result", "图片没下载下来");
image.setBackgroundResource(R.drawable.error);
}else
{
Log.i("result", "图片下载下来更新界面");
image.setImageBitmap(bitmap);
}
}

};
return convertView;
}
}
//开启线程 字数超了 图片是
截图错了 这个是线程里面的代码
展开
 我来答
150357406
2011-10-18 · 超过12用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:13.6万
展开全部
通过消息发送的对象大小不能超过100K,你看看bitmap对象是不是超出了。还是发Uri,再加载吧。
追问
您好,能说详细点么~上面那个截图错了。出来的效果是listview 中只有最后一项有图片 但是图片是错的 应该是第一项中的图片。打印了看下 线程和图片都没问题 但是handler中只执行了一次
追答
你的时间损耗主要花在网络下载上了。试试以下两个方法:

1. 可以先换服务器端使用一个很小图片验证一下。
2. 使用本地的很小的图片的bitmap通过消息发过去验证一下。

如果是图片大导致的,需要先把bitmap保存到本地,然后把路径发消息给前台,前台再加载,就不会有问题了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式