Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sqlite数据抽象到布局_Java_Android_Listview_Cursor_Content Values - Fatal编程技术网

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));

        ....