2017-03-02 102 views
0

我想從getName()方法獲得數據庫類中的數據,並將這些數據放入ListView中。任何人都可以請幫我看看這裏。每次嘗試打開此活動時,它都會崩潰。如何從SQLite數據庫獲取數據到其他有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; 
    } 

回答

0

所以我在定義目標XML file.I這裏做了一個愚蠢的錯誤選擇一個佈局文件,而不是從相同的佈局選擇TextView的ID文件我不小心把另一個佈局文件textView id。

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

你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

+0

我的數據庫裏面有數據,我可以找回其他的看法。但是這個ListView沒有從數據庫中獲取任何東西。不過,我會檢查你的解決方案。謝謝。 – KirTan

相關問題