Android-java.lang.NullPointerException,CustomAdapter.getView(CustomAdapter.java:XX)

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

现在,当我试图在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.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);