Android-java.lang.NullPointerException,CustomAdapter.getView(CustomAdapter.java:XX)
现在,当我试图在listview中填充json数据时,我遇到了这个错误。仅供参考,此应用程序只有一个活动,因为我使用的是tabhost和多个片段。是因为我使用了fragment和tabhost吗 我收到了以下错误消息:Android-java.lang.NullPointerException,CustomAdapter.getView(CustomAdapter.java:XX),java,android,Java,Android,现在,当我试图在listview中填充json数据时,我遇到了这个错误。仅供参考,此应用程序只有一个活动,因为我使用的是tabhost和多个片段。是因为我使用了fragment和tabhost吗 我收到了以下错误消息: 02-17 17:24:59.761: E/AndroidRuntime(4095): java.lang.NullPointerException 02-17 17:24:59.761: E/AndroidRuntime(4095): at com.revivalx.x
02-17 17:24:59.761: E/AndroidRuntime(4095): java.lang.NullPointerException
02-17 17:24:59.761: E/AndroidRuntime(4095): at com.revivalx.xxxxx.popular.HistoryListAdapter.getView(HistoryListAdapter.java:64)
在HistoryListAdapter.java
内的此行中发生错误
thumbNail.setImageUrl(user.getProfilePhotoUrl(), imageLoader);
初始化活动(HomeActivity.java)
我已经注意到哪个部分出现了错误
HistoryListAdapter.java
public class HistoryListAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<User> users;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public HistoryListAdapter(Activity activity, List<User> users) {
this.users = users;
inflater = activity.getLayoutInflater();
}
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int location) {
return users.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row, parent,false);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail);
TextView name = (TextView) convertView.findViewById(R.id.name);
TextView lastActive = (TextView) convertView.findViewById(R.id.lastActive);
User user = users.get(position);
thumbNail.setImageUrl(user.getProfilePhotoUrl(), imageLoader);// ERROR HERE
name.setText(user.getName());
lastActive.setText(user.getLastActive());
return convertView;
}
}
公共类HistoryListAdapter扩展了BaseAdapter{
私人充气机;
私人名单用户;
ImageLoader ImageLoader=AppController.getInstance().getImageLoader();
公共HistoryListAdapter(活动、列表用户){
this.users=用户;
充气器=活动。GetLayoutFlater();
}
@凌驾
public int getCount(){
返回users.size();
}
@凌驾
公共对象getItem(int位置){
返回users.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null)
convertView=充气机。充气(R.layout.list_行,父项,false);
如果(imageLoader==null)
imageLoader=AppController.getInstance().getImageLoader();
NetworkImageView缩略图=(NetworkImageView)convertView.findViewById(R.id.缩略图);
TextView name=(TextView)convertView.findViewById(R.id.name);
TextView lastActive=(TextView)convertView.findViewById(R.id.lastActive);
User=users.get(位置);
thumbNail.setImageUrl(user.getProfilePhotoUrl(),imageLoader);//此处出错
name.setText(user.getName());
lastActive.setText(user.getLastActive());
返回视图;
}
}
HistoryFragment(这里我称之为HistoryListAdapter)
公共类HistoryFragment扩展了片段{
private List userList=new ArrayList();
私有列表视图列表视图;
专用HistoryListAdapter适配器;
公共历史片段(){
//TODO自动生成的构造函数存根
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//TODO自动生成的方法存根
视图v=LayoutInflater.from(getActivity())。充气(R.layout.activity\u history\u片段,
无效);
listView=(listView)v.findViewById(R.id.list);
适配器=新的HistoryListAdapter(getActivity(),this.userList);
setAdapter(适配器);
/*一切都在编码*/
返回v;
}
/*一切都在编码*/
}
使用getActivity()
而不是将活动存储在变量中 您声明了活动,但从未初始化它,因为适配器的构造函数只接受数据集:
public class HistoryListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<User> users;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public HistoryListAdapter(List<User> users) {
this.users = users;
}
你可以摆脱
if (inflater == null)
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
从getView
另一个与此无关的是
HistoryFragment
。您正在onCreateView
中分配另一个LayoutInflater
。框架已经提供了一个对象作为参数。您可以而且应该使用它什么是活动
?显示初始化活动的位置。好的,请稍候。我更新了我的问题。活动变量初始化正确吗?activity.getSystemService
中的“什么是活动?”HistoryListAdapter中的activity
为空。尝试将其更改为getActivity或create方法来设置它并调用HistoryFragmentation,您如何初始化适配器?我的意思是,您没有像new HistoryListAdapter(null,this.userList)那样初始化它代码>,不是吗?已经有了,adapter=new HistoryListAdapter(getActivity(),this.userList);setAdapter(适配器);抱歉,最新的错误消息是-在com.revivalx.xxxxx.popular.HistoryListAdapter.getView(HistoryListAdapter.java:64)。我已经更新了这个问题。这意味着用户、imageLoader和缩略图之间的值为空
public class HistoryListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<User> users;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public HistoryListAdapter(List<User> users) {
this.users = users;
}
public class HistoryListAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<User> users;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public HistoryListAdapter(Activity activity, List<User> users) {
this.users = users;
inflater = activity.getLayoutInflater();
}
if (inflater == null)
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);