データベースからデータを取得し、AddDetails というクラスを使用して Arraylist に追加しました。AddDetails クラスでは、すべての値を割り当てています。次に、その ArrayList をアクティビティ クラスに送信し、そのデータを ListView に表示する必要があります。ArrayList から Array にデータをコピーしているときに、クラスが見つからないなどのエラーが発生したり、リスト ビューに表示しているときにガベージ値が表示されたりします。
コードは次のとおりです。
private class SearchTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
DatabaseHandler db = new DatabaseHandler();
String Place = etSearch.getText().toString();
AddDetails details = new AddDetails(Place);
alSearchResult = db.searchResultByPlace(details);
arrStr = new String[alSearchResult.size()];
try
{
arrStr = (String[]) alSearchResult.toArray();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(SearchActivity.this, android.R.layout.simple_list_item_multiple_choice, arrStr);
lsSearchResult.setAdapter(adapter);
}
catch(Exception e)
{
Log.e("Error:" + e.toString());
}
return null;
}
protected ArrayList<AddDetails> searchResultByPlace(AddDetails details)
{
ArrayList<AddDetails> alSearchData = null;
try
{
String place = details.getPlace();
Cursor c = mDataBase.rawQuery("SELECT * FROM " + ESTATE_DETAILS + " WHERE " + strSearchType + " = " + "'" + place + "'", null);
c.moveToFirst();
if(c.getCount() > 0)
{
alSearchData = new ArrayList<AddDetails>();
if (c.moveToFirst())
{
do {
details = new AddDetails();
details.setID(Integer.parseInt(c.getString(0)));
details.setPlace(c.getString(1));
details.setArea(c.getString(2));
details.setType(c.getString(3));
details.setPhoneNumber(c.getString(4));
// Adding contact to list
alSearchData.add(details);
} while (c.moveToNext());
}
}
c.close();
}
catch(SQLException e)
{
Log.e("Error:", e.toString());
}
return alSearchData;
}