80,490
社区成员
发帖
与我相关
我的任务
分享
public class DemoActivity extends Activity {
private ListView lv;
private List<Channel> channels;
private LayoutInflater inflater;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// inflater = (LayoutInflater)
// getSystemService(LAYOUT_INFLATER_SERVICE);
inflater = LayoutInflater.from(this);
lv = (ListView) this.findViewById(R.id.lv);
String address = getResources().getString(R.string.serverurl);
try {
InputStream is = NetUtil.getChannelStream(address);
channels = ChannelService.getChannels(is);
} catch (Exception e) {
Toast.makeText(this, "获取数据失败", 0).show();
e.printStackTrace();
}
// 填充listview的数据
lv.setAdapter(new MyAdapter());
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Channel chanel = (Channel) lv.getItemAtPosition(position);
String channelid = chanel.getId();
Toast.makeText(DemoActivity.this, "提交 "+channelid+"到服务器", 0).show();
}
});
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return channels.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return channels.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = inflater.inflate(R.layout.item, null);
Channel channel = channels.get(position);
ImageView iv_item = (ImageView) view.findViewById(R.id.iv_item);
TextView tv_count = (TextView) view.findViewById(R.id.tv_count);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
TextView tv_time = (TextView) view.findViewById(R.id.tv_time);
// 这句代码会产生问题么?
tv_count.setText("点播次数 " + channel.getCount());
tv_name.setText(channel.getName());
tv_time.setText("播放时间 " + channel.getTime());
String address = channel.getIcon();
int start = address.lastIndexOf("/");
String iconname = address.substring(start + 1, address.length());
File file = new File(Environment.getExternalStorageDirectory(),
iconname);
if (file.exists() && file.length() > 0) {// 如果存在 就直接使用 sd卡的文件
iv_item.setImageURI(Uri.fromFile(file));
System.out.println("使用缓存");
} else {
// 如果不存在 才去下载网络上的图片
try {
Bitmap bitmap = ImageUtil.getImage(address);
iv_item.setImageBitmap(bitmap);
System.out.println("下载新的图片");
} catch (Exception e) {
e.printStackTrace();
iv_item.setImageResource(R.drawable.default_icon);
}
}
return view;
}
}
}
InputStream is = NetUtil.getChannelStream(address);/code] 这个代码里面 没有用支线程的话 会报network onMainthread 错误 如果用了 支线程的话[code=javachannels = ChannelService.getChannels(is); 这句里面的 is 基本上 必定为null
解决方法[code=java]channels = ChannelService.getChannels(is);/code] 这句放到 第一句 的回调方法里面 或者把 后面这句和前面那句放到一个线程里面。