传智播客android nullpoint exception问题!!!!!

xcm1997 2016-02-05 02:43:31
在看传智播客视频是跟着做一个小项目
可怎么都运行出错
显示空指针异常,清理了许多次,并又重新写了一遍
可还是有问题
我把传智播客的原版代码在eclipse运行
也出同样的错误!!!!!!!!!!!!可视频上清理了一次就正常运行了啊
为什么啊!!!!!!!!!!!!!

这是主文件,你们还要什么文件我发给你们


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;
}

}
}













...全文
202 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
摘星猿 2016-02-06
  • 打赏
  • 举报
回复
InputStream is = NetUtil.getChannelStream(address) 里面 肯定是 起了支线程的 你应该写个 请求回调 接口 把 请求的数据回调回来 再用 handler 去设置数据 adapter 里面 getcount()里面 加 判断 提高 代码健壮性。
摘星猿 2016-02-06
  • 打赏
  • 举报
回复
这里 应该会报 2中类型的错误 如果
 InputStream is = NetUtil.getChannelStream(address);/code]  这个代码里面 没有用支线程的话   会报network onMainthread  错误  如果用了 支线程的话[code=javachannels = ChannelService.getChannels(is);
这句里面的 is 基本上 必定为null 解决方法[code=java]channels = ChannelService.getChannels(is);/code] 这句放到 第一句 的回调方法里面 或者把 后面这句和前面那句放到一个线程里面。
sagittarius1988 2016-02-05
  • 打赏
  • 举报
回复
网络操作不能在UI线程里执行,所以 try { InputStream is = NetUtil.getChannelStream(address); channels = ChannelService.getChannels(is); } catch (Exception e) { Toast.makeText(this, "获取数据失败", 0).show(); e.printStackTrace(); } 这里会异常,导致channels根本就没有进行赋值,而是null
默默无名者 2016-02-05
  • 打赏
  • 举报
回复
会不会是创建适配器 new MyAdapter() 这里没有传参数

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧