【问题标题】:Insert SQLite data into ListView将 SQLite 数据插入 ListView
【发布时间】:2016-08-19 15:01:29
【问题描述】:

我试图从我的 SQLite 数据库中获取一些数据到 ListView 中,但它不会出现在那里。与 SQLite 的连接工作得很好,我用一些字符串对其进行了测试,它们出现了。所以我认为我在创建数据时犯了一个错误。

这是我的 概述活动 公共类 OverviewActivity 扩展 ListActivity 实现 View.OnClickListener {

private DataSource dataSource;

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.overview);

    dataSource = new DataSource(this);
    dataSource.open();

    String[] values2 = {"1", "2", "3"};
    List<ValuesGetSet> values = dataSource.getAllValues();

    ArrayAdapter<ValuesGetSet> adapter = new ArrayAdapter<ValuesGetSet>(this, android.R.layout.simple_list_item_1, values);

    //When i change values to values 2 it works perfectly


    setListAdapter(adapter);
}
@Override
public void onClick(View v) {
    ArrayAdapter<ValuesGetSet> adapter = (ArrayAdapter<ValuesGetSet>) getListAdapter();
    ValuesGetSet valuesGetSet = null;
    switch (v.getId()){
        case R.id.add:
            valuesGetSet = dataSource.createValues(4, "Testname", "Testversion", "Testmethod", 200, false);
            adapter.add(valuesGetSet);
            Log.d("LOG_TAG", "" + dataSource.getAllValues());
            break;
        case R.id.remove:
            if (getListAdapter().getCount() > 0){
                valuesGetSet = (ValuesGetSet) getListAdapter().getItem(0);
                dataSource.deleteValues(valuesGetSet);
                adapter.remove(valuesGetSet);
            }
            break;
    }
    adapter.notifyDataSetChanged();
}

@Override
public void onResume(){
    dataSource.open();
    super.onResume();
}

@Override
public void onPause(){
    dataSource.close();
    super.onPause();
}
}

这是我的数据源类:

public class DataSource {

private SQLiteDatabase database;
private FeedReaderDBHelper dbHelper;
private String [] allColumns = {
        FeedReaderDBHelper.COLUMN_NAME_ID, FeedReaderDBHelper.COLUMN_NAME_NUMBER,
        FeedReaderDBHelper.COLUMN_NAME_NAME, FeedReaderDBHelper.COLUMN_NAME_VERSION,
        FeedReaderDBHelper.COLUMN_NAME_METHOD, FeedReaderDBHelper.COLUMN_NAME_CHAIN_NUMBER,
        FeedReaderDBHelper.COLUMN_NAME_CAUGHT};

public DataSource(Context context){
    dbHelper = new FeedReaderDBHelper(context);
}

public void open() throws SQLException{
    database = dbHelper.getWritableDatabase();
}

public void close(){
    dbHelper.close();
}

public ValuesGetSet createValues(int number, String name, String version, String method, int chainNumber, boolean caught){
    ContentValues values = new ContentValues();
    values.put(FeedReaderDBHelper.COLUMN_NAME_NUMBER, number);
    values.put(FeedReaderDBHelper.COLUMN_NAME_NAME, name);
    values.put(FeedReaderDBHelper.COLUMN_NAME_VERSION, version);
    values.put(FeedReaderDBHelper.COLUMN_NAME_METHOD, method);
    values.put(FeedReaderDBHelper.COLUMN_NAME_CHAIN_NUMBER, chainNumber);
    values.put(FeedReaderDBHelper.COLUMN_NAME_CAUGHT, caught);

    long insertID = database.insert(FeedReaderDBHelper.TABLE_NAME, null, values);

    Cursor cursor = database.query(
            FeedReaderDBHelper.TABLE_NAME,
            allColumns,
            FeedReaderDBHelper.COLUMN_NAME_ID + " = " + insertID,
            null, null, null, null);

    cursor.moveToFirst();
    ValuesGetSet newValuesGetSet = cursorToValues(cursor);
    cursor.close();
    return newValuesGetSet;

}

public void deleteValues(ValuesGetSet valuesGetSet){
    long id = valuesGetSet.getId();
    System.out.println("Values deleted with id: " + id);
    database.delete(
            FeedReaderDBHelper.TABLE_NAME,
            FeedReaderDBHelper.COLUMN_NAME_ID + " = " + id,
            null);
}

public List<ValuesGetSet> getAllValues(){
    List<ValuesGetSet> valuesGetSets = new ArrayList<ValuesGetSet>();

    Cursor cursor = database.query(FeedReaderDBHelper.TABLE_NAME, allColumns, null, null, null, null, null);
    cursor.moveToFirst();

    while (!cursor.isAfterLast()){
        ValuesGetSet valuesGetSet = cursorToValues(cursor);
        valuesGetSets.add(valuesGetSet);
        cursor.moveToNext();
    }

    cursor.close();
    return valuesGetSets;
}

private ValuesGetSet cursorToValues(Cursor cursor){
    ValuesGetSet valuesGetSet = new ValuesGetSet();
    valuesGetSet.setId(cursor.getLong(0));
    valuesGetSet.setNumber(cursor.getInt(1));
    return valuesGetSet;
}
}

这是我的 ValuesGetSet 类

public class ValuesGetSet {

private int number;
private int chainNumber;
private long id;
private String name;
private String version;
private String method;
private boolean caught;

public long getId() {
    return id;
}

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

public int getNumber() {
    return number;
}

public void setNumber(int number) {
    this.number = number;
}

public int getChainNumber() {
    return chainNumber;
}

public void setChainNumber(int chainNumber) {
    this.chainNumber = chainNumber;
}

public String getName() {
    return name;
}

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

public String getVersion() {
    return version;
}

public void setVersion(String version) {
    this.version = version;
}

public String getMethod() {
    return method;
}

public void setMethod(String method) {
    this.method = method;
}

public boolean isCaught() {
    return caught;
}

public void setCaught(boolean caught) {
    this.caught = caught;
}

@Override
public String toString(){
    return String.valueOf(this);
}
}

我假设我的错误在最后一部分 - public String to String() - 但我不知道如何解决这个问题。

我对 android 编程还很陌生,所以任何帮助都将不胜感激。

【问题讨论】:

  • 我建议使用SimpleCursorAdapter 或扩展CursorAdapater。它们都为您处理了大量的数据库通信。
  • 感谢您的评论,但遗憾的是没有帮助。
  • 我建议您发布一个新问题(或编辑此问题),说明您尝试了什么,并解释它的作用以及您想要什么。

标签: android listview android-sqlite


【解决方案1】:

像这样修改ValuesGetSet类的toString()。

@Override
public String toString() {
    return "ValuesGetSet{" +
            "number=" + number +
            ", chainNumber=" + chainNumber +
            ", id=" + id +
            ", name='" + name + '\'' +
            ", version='" + version + '\'' +
            ", method='" + method + '\'' +
            ", caught=" + caught +
            '}';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多