目的是从MYSQL表中检索数据并将其输入到列表视图中。为了做到这一点,我将值放入数组中。但是,似乎数组的长度必须等于从表中取得的值的数量(可以变化);或者应用程序将以空指针异常响应。
我的问题是:如何将数组设置为动态长度,以便错误不会发展?或者有其他方式吗?
定义使用的阵列:
public String titleId[] = new String[2]; //Defining the arrays used
public Integer imageId[] = new Integer[2];
将数组设置为等于:(目前,这将执行2次迭代)
for(int i=0; i<jArray.length();i++){
JSONObject json = jArray.getJSONObject(i);
titleId[i] = "test";
imageId[i] = R.drawable.ic_launcher;
}
使用数组设置ListView:
CustomList adapter = new
CustomList(getActivity(), data.titleId, data.imageId);
listView.setAdapter(adapter);
CustomList.java(用于设置自定义适配器)
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] titleId;
private final Integer[] imageId;
public CustomList(Activity context,
String[] titleId, Integer[] imageId) {
super(context, R.layout.single_row, titleId);
this.context = context;
this.titleId = titleId;
this.imageId = imageId;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.single_row, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.tvTitle);
ImageView imageView = (ImageView) rowView.findViewById(R.id.ivIcon);
txtTitle.setText(titleId[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}
答案 0 :(得分:3)
我建议您使用JDK提供的动态数据结构。更具体地说,实现List
界面的人似乎符合您的目标。
您应该在List
对象中收集数据,之后您可以从中生成数组。
例如:
List<String> titleId = new ArrayList();
假设您从JDBC结果集中获取数据:
while(res.next())
{
titleId.add(res.getString("dbTableColumn"));
}
最后,从列表中生成一个数组并将其传递给CustomList
构造函数:
CustomList adapter = new CustomList(getActivity(), data.titleId.toArray(), ...);