【问题标题】:How to show external sqlite database's data in customize listview in android studio?如何在android studio的自定义列表视图中显示外部sqlite数据库数据?
【发布时间】:2019-02-10 09:03:40
【问题描述】:

我想知道这是在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;
    }
}

我能做些什么来解决这个问题?提前谢谢...

【问题讨论】:

  • 你好莱昂。可以分享一下你的 Model 课吗?
  • 嗨。我已经编辑了我的模型。请检查一下。谢谢@JuanjoBerenguer

标签: android database sqlite oop


【解决方案1】:

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

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

在您的模型类中。

另外使用:-

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

即偏移量 0 是光标中的第一列,即 id3phone

虽然最好根据列名获取偏移量。例如(最好使用常量作为表名和列名,而不是到处硬编码)。

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

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

【讨论】:

  • 问题就在这里。 mList.add(new Model(id, name, address, phone)); 它说模型中的模型()不能应用于:预期的实际参数:参数id(int)名称(java.lang.String)地址(java.lang.String)电话(java.lang.String)跨度>
【解决方案2】:

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

型号

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

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

【讨论】:

  • 它已修复。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多