2017-03-02 8 views
0

データベースクラスのgetName()メソッドからデータを取得し、ListViewにそれらのデータを入れたいと思います。このアクティビティを開こうとするたびにクラッシュします。SQLite DBからListViewを持つ他のアクティビティにデータを取得するには

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

これは私がコードの下に実行したときに表示されるエラーMSGです:

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は、1つのレイアウトファイルを選択し定義する際に、ここで愚かなミスを犯したとの代わりに、同じレイアウトからの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

私のDBには他のビューで取得できるデータがあります。しかし、このListViewはDBから何も取得していません。それでも、私はあなたの解決策をチェックするつもりです。ありがとうございました。 – KirTan

関連する問題