【问题标题】:How Do I get Data from SQLite DB to other activity which has ListView如何从 SQLite DB 获取数据到具有 ListView 的其他活动
【发布时间】:2017-03-02 13:32:38
【问题描述】:

我想从 Database 类中的 getName() 方法中获取数据,并将这些数据放入 ListView。有人可以在这里帮帮我吗?每次我尝试打开此活动时它都会崩溃。

Caused by : java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.addAll(java.util.Collection)' on a null object reference"

这是我运行以下代码时出现的错误消息:

public class ListActivity extends android.app.ListActivity {
    ListView mListNames;
    ArrayList<String> mNames;
    DBForm dbForm = new DBForm(this);`

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        mListNames = (ListView) findViewById(android.R.id.list);

        mNames.addAll(dbForm.getName());
        this.setListAdapter(new ArrayAdapter<>(this, R.layout.list_head, mNames));

    }
}

这就是我在 DB 类中存储和检索数据的方式:

public ArrayList<String> getName() {
        ArrayList<String> array_list = new ArrayList<>();

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res = db.rawQuery("select name from contacts" , null);
        res.moveToFirst();

        while (!res.isAfterLast()) {
            array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_NAME)));
            res.moveToNext();
        }
        res.close();
        return array_list;
    }

【问题讨论】:

    标签: java android sqlite listview


    【解决方案1】:

    您在 getName() 方法中的问题。也许你的桌子是空的。您需要在循环之前检查光标的空值。如下:

    if (cursor.moveToFirst()) {
           while (cursor.isAfterLast() == false) {
             String name = cursor.getString(cursor.getColumnIndex(countyname));
             list.add(name);
             cursor.moveToNext();
           }
    }
    

    参考:Get all rows from SQLite

    【讨论】:

    • 我的数据库里面有数据,因为我可以在其他视图上检索它。但是这个 ListView 没有从数据库中得到任何东西。不过,我会检查你的解决方案。谢谢。
    【解决方案2】:

    所以我在这里定义目标 XML 文件时犯了一个愚蠢的错误。我选择了一个布局文件,而不是从同一个布局文件中选择 textView id,我不小心放了另一个布局文件 textView id。

    adapter = new ArrayAdapter<>(this, R.layout.list_view, R.id.list_names, mNames);
    mListNames.setAdapter(adapter);
    

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 1970-01-01
      • 2016-12-01
      • 2019-04-22
      • 2016-08-04
      • 2023-04-11
      • 1970-01-01
      • 2022-11-14
      • 2019-10-26
      相关资源
      最近更新 更多