如何在android studio中的自定义列表视图中显示外部sqlite数据库数据?

问题描述 投票:-1回答:2

我想知道这是在android studio中使用/ oop&sqlite在自定义列表视图中显示数据的方法吗?

在这个java页面中,我在这里分配了它们

public static Model txn;

    public static SQLiteHelper mSQLiteHelper;
    ListView mListView;
    ArrayList<Model> mList;
    RecordListAdapter mAdapter = null;

在那之后,我初始化了它们

mListView =findViewById(R.id.listView);
        mList = new ArrayList<>();
        mAdapter = new RecordListAdapter(this, R.layout.row, mList);
        mListView.setAdapter(mAdapter);

这是我试图抓住它们并显示出来的代码。我在这条线mList.add(new Model(id, name, address, phone));遇到了一个问题。

try{
            SQLiteDatabase db = mSQLiteHelper.getReadableDatabase();
            Cursor cursor = db.query("Table1", new String[]{"id", "name", "address", "phone"}, null,
                    null, null, null, null);
            mList.clear();
            while(cursor.moveToNext()){
                int id = cursor.getInt(3);
                String name = cursor.getString(0);
                String address = cursor.getString(1);
                String phone = cursor.getString(2);

                mList.add(new Model(id, name, address, phone));
            }
            mAdapter.notifyDataSetChanged();
            if (mList.size() == 0) {
                Toast.makeText(this, "No record found...", Toast.LENGTH_SHORT).show();
            }

            mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int i, long l) {
                    return false;
                }
            });
        }catch (Exception e){
            e.printStackTrace();
        }

这是红色错误说的

Model() in Model cannot be applied to:
Expected Actual
Parameters: Arguments

id(int)
name(java.lang.String)
address(java.lang.String)
phone(java.lang.String)

这是我的模型页面

public class Model {
    private int id;
    private String name;
    private String address;
    private String phone;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

我该怎么做才能解决这个问题?提前致谢...

android database sqlite oop
2个回答
0
投票

我认为你缺少创建构造函数:

模型

public class Model {
    private int id;
    private String name;
    private String address;
    private String phone;

    public Model(int id,String name,String address,String phone){
      this.id = id;
      this.name = name;
      this.address = address;
      this.phone = phone;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

我认为这应该解决这个错误。


0
投票

您没有采用4个参数的构造函数。你需要这样的东西: -

   public Model(int id,String name,String address,String phone){
      this.id = id;
      this.name = name;
      this.address = address;
      this.phone = phone;
    }

在您的Model类中。

另外使用: -

            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            String address = cursor.getString(2);
            String phone = cursor.getString(3);

即,偏移0是光标中的第一列,即id,3是电话。

虽然根据列名更好地获得偏移量。例如(理想情况下,对表名和列名使用常量,而不是在任何地方使用硬编码)。

            int id = cursor.getInt(csr.getColumnIndex("id"));

如果这不能解决问题,请编辑您的问题以包含堆栈跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.