如何从SQLite DB获取数据到其他具有ListView的活动

时间:2017-03-02 13:32:39

标签: java android sqlite listview

我想从数据库类中的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;
    }

2 个答案:

答案 0 :(得分:0)

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

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

请参阅:Get all rows from SQLite

答案 1 :(得分:0)

  

所以我在定义目标XML文件时犯了一个愚蠢的错误。我选择了一个布局文件,而不是从同一个布局文件中选择textView id,我意外地将另一个布局文件设置为textView id。

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