Java Sqlite数据抽象到布局
我试图从Java Sqlite数据抽象到布局,java,android,listview,cursor,content-values,Java,Android,Listview,Cursor,Content Values,我试图从SQLite数据库中提取数据。我正在正确获取检索数据,但我认为布局中存在问题 我插入了两行,但它只多次显示一行 long id; DBAdapter db = new DBAdapter(getActivity()); db.open(); id = db.insertEducationDetail(1, "a", "b", "c", "d"); id = db.insertEducationDetail(1, "1", "1", "1", "1"); Cursor c =
SQLite
数据库中提取数据。我正在正确获取检索数据,但我认为布局中存在问题
我插入了两行,但它只多次显示一行
long id;
DBAdapter db = new DBAdapter(getActivity());
db.open();
id = db.insertEducationDetail(1, "a", "b", "c", "d");
id = db.insertEducationDetail(1, "1", "1", "1", "1");
Cursor c = db.getAllContact();
if(c.moveToFirst()){
Display(c);
}
db.close();
显示:
ArrayList<String> _data = null;
for(int i=0 ; i<cur.getCount(); i++){
_data = new ArrayList<String>();
for(int j=0 ; j<cur.getColumnCount(); j++){
_data.add(cur.getString(j));
}
}
list.setAdapter(new Educational_Adapter2(getActivity().getApplicationContext(),a));
在输出中,重复数据4次
您没有沿着
显示中的行移动光标(应为小写!)。因此,在外部for
循环中,您应该添加cur.moveToPosition(i)
,如:
public void Display(Cursor cur){
ArrayList<String> a = null;
for(int i=0 ; i<cur.getCount(); i++){
a = new ArrayList<String>();
cur.moveToPosition(i);
for(int j=0 ; j<cur.getColumnCount(); j++){
a.add(cur.getString(j));
}
}
list.setAdapter(new Educational_Adapter2(getActivity().getApplicationContext(),a));
}
请注意,这种适配器效率稍低。为了提高大型数据集的性能,您可能需要阅读一些关于“ViewHolder”设计模式的内容(在这个主题上有很多问题) 您不应该在循环中调用“a=new ArrayList();”,这就是您丢失上一次迭代中所有数据的原因。首先,您传递的列表只包含最后一个条目的字段,因为您每次都重新创建该列表。您创建了一个适配器,并在那里传递了一个包含8个字符串的列表-这就是为什么它有8行。你写的每一行内容都是一样的。您可以声明EducationDetail类,创建详细信息列表并将其传递给适配器。但最好的方法是使用向我们展示您所有的adapter.java代码和insertEducationDetail()代码。您能告诉我为什么不创建表的第二行吗?@Mohit每次插入后您得到的id值是多少吗?相同还是不同?在toast中返回2行..但在布局中只显示第一行数据(8次)
public void Display(Cursor cur){
ArrayList<String> a = null;
for(int i=0 ; i<cur.getCount(); i++){
a = new ArrayList<String>();
cur.moveToPosition(i);
for(int j=0 ; j<cur.getColumnCount(); j++){
a.add(cur.getString(j));
}
}
list.setAdapter(new Educational_Adapter2(getActivity().getApplicationContext(),a));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listing;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView == null){
listing = new View(context);
listing = inflater.inflate(R.layout.educational_item, null);
} else {
listing = convertView;
}
title = (TextView) listing.findViewById(R.id.educational_text1);
degree = (TextView) listing.findViewById(R.id.educational_text2);
duration= (TextView)listing.findViewById(R.id.educational_text3);
stream = (TextView)listing.findViewById(R.id.educational_text4);
institution = (TextView) listing.findViewById(R.id.educational_text5);
location=(TextView)listing.findViewById(R.id.educational_text6);
university = (TextView)listing.findViewById(R.id.educational_text7);
score= (TextView)listing.findViewById(R.id.educational_text8);
title.setText(a.get(0));
degree.setText(a.get(1));
duration.setText(a.get(2));
stream.setText(a.get(3));
institution.setText(a.get(4));
location.setText(a.get(5));
university.setText(a.get(6));
score.setText(a.get(7));
return listing;
}
public void Display(Cursor cur){
ArrayList<EducationInformation> a = new ArrayList<EducationInformation>;
EducationInformation obj = null;
for(int i=0 ; i<cur.getCount(); i++){
obj = new EducationInformation();
ArrayList<String> a = new ArrayList<String>();
for(int j=0 ; j<cur.getColumnCount(); j++){
a.add(cur.getString(j));
}
obj.setInfo(a);
}
list.setAdapter(new Educational_Adapter2(getActivity().getApplicationContext(),obj));
}
private class EducationInformation{
private ArrayList<String> info;
//getter setter
}
@Override
public int getCount() {
return info.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
....
title.setText(a.get(position).get(0));
degree.setText(a.get(position).get(1));
duration.setText(a.get(position).get(2));
stream.setText(a.get(position).get(3));
institution.setText(a.get(position).get(4));
location.setText(a.get(position).get(5));
university.setText(a.get(position).get(6));
score.setText(a.get(position).get(7));
....