Java 处理空ArrayList的Android BaseAdapter

Java 处理空ArrayList的Android BaseAdapter,java,android,listview,baseadapter,Java,Android,Listview,Baseadapter,我正在尝试使用基本适配器用ArrayList>填充ListView。ArrayList由数据库填充,数据库可能没有条目,因此ArrayList为空,例如,当应用程序第一次启动时。当ArrayList为空时,我收到一个非de脚本“java.lang.RuntimeException:无法启动activity ComponentInfo…java.lang.NullPointerException” 我的onCreate方法如下所示: @Override public void onCreate(B

我正在尝试使用基本适配器用ArrayList>填充ListView。ArrayList由数据库填充,数据库可能没有条目,因此ArrayList为空,例如,当应用程序第一次启动时。当ArrayList为空时,我收到一个非de脚本“java.lang.RuntimeException:无法启动activity ComponentInfo…java.lang.NullPointerException”

我的onCreate方法如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.samples_list_layout);
    mContext = getApplicationContext();
    lv = getListView();
    list = myDatabase.getInstance(mContext).getAllSamples();
    sa = new SamplesAdapter(this, list);
    lv.setAdapter(sa);
    registerForContextMenu(lv);
}
设置lv.setAdapter(null)将使应用程序显示我设置的空列表视图。但是,当我把它留给BaseAdapter时,我得到了错误。 我遵循了两个Android List8.java和List14.java示例,两种方法都给出了相同的结果。 我的BaseAdapter类如下所示:

public class SamplesAdapter extends BaseAdapter {

private static final String SAMPLE_NAME_COL = "name";

private static final String SAMPLE_HOST_COL = "host";

private static final String SAMPLE_ICON_COL = "icon";

private static final String SAMPLE_MODIFIED_STAMP_COL = "moddate";

private Context mContext;
private ArrayList<HashMap<String, String>> samples = new ArrayList<HashMap<String, String>>();

public SamplesAdapter(Context c, ArrayList<HashMap<String, String>> list){
    mContext = c;
    samples = list;
}

public int getCount() {
    return samples.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.samples_row_layout, parent, false);
    TextView name = (TextView) v.findViewById(R.id.samples_name);
    name.setText(samples.get(position).get(SAMPLE_NAME_COL));
    TextView host = (TextView) v.findViewById(R.id.samples_host);
    host.setText(samples.get(position).get(SAMPLE_HOST_COL));
    TextView moddate = (TextView) v.findViewById(R.id.samples_mod_stamp);
    moddate.setText(samples.get(position).get(SAMPLE_MODIFIED_STAMP_COL));
    return v;
}

}
公共类SamplesAdapter扩展了BaseAdapter{
私有静态最终字符串示例\u NAME\u COL=“NAME”;
私有静态最终字符串SAMPLE\u HOST\u COL=“HOST”;
私有静态最终字符串示例\u ICON\u COL=“ICON”;
私有静态最终字符串示例\u修改\u戳记\u COL=“moddate”;
私有上下文;
private ArrayList samples=new ArrayList();
公共示例适配器(上下文c、ArrayList列表){
mContext=c;
样本=列表;
}
public int getCount(){
返回samples.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
视图v=充气机。充气(R.layout.samples\u row\u layout,parent,false);
TextView名称=(TextView)v.findViewById(R.id.samples\u名称);
name.setText(samples.get(position.get(SAMPLE\u name\u COL));
TextView主机=(TextView)v.findviewbyd(R.id.samples\u主机);
setText(samples.get(position.get(SAMPLE\u host\u COL));
TextView moddate=(TextView)v.findViewById(R.id.samples\u mod\u stamp);
moddate.setText(samples.get(position).get(SAMPLE\u MODIFIED\u STAMP\u COL));
返回v;
}
}

我还应该注意,当有东西要显示时,ListView会正确地显示项目。只有当ArrayList为空时,它才会失败。另外,我使用的是安卓2.2(我知道不是最好的)。任何帮助都将不胜感激。

getCount
返回0,以避免NPE:

public int getCount() {
    return (samples == null) ? 0 : samples.size();
}

非常感谢你的帮助,成功了。第一次启动应用程序时,我的空ListView会出现,但当我删除数据库中的所有条目、更新ArrayList并调用sa.notifyDataSetChanged()时,NPE会出现;有什么想法吗?