onPostExecuteで取得した値をlistviewの各リスト行に表示させたい
MySQLのデータを取得しlistviewの各リストに「next()」で取ってきたテーブルの各レコードの各データが
一緒に入ってしまい、本来レコードの1行ごとのデータをlistviewの1行のリスト内にい入れたいのですが
入りません。どなたか、教えていただけますでしょうか
//DBから読みこみ
class TaskDbQuery extends AsyncTask<Void,Void,String> {
<省略>
}
@Override
protected String doInBackground(Void... params) {
String rsText="";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con =DriverManager.getConnection(url,user,pass);
Statement smt = con.createStatement();
String sql = "select * from memo_tbl";
ResultSet rs = smt.executeQuery(sql);
while (rs.next()) {
rsText += rs.getString(1) + "\n";
}
rs.close();
smt.close();
con.close();
}catch (Exception e) {
<省略>
}
return rsText;
}
//戻り値
protected void onPostExecute(String result){
List<String> list = new ArrayList<String>();
//List list = new ArrayList();
list.add(result);
//データ追加
for (int i = 0; i < list.size(); i++) {
adapter.add(result);
}
//Activityにあるlistを取得
TextView tv = (TextView)activity_test_db11.findViewById(R.layout.list);
}
}
DBには、テーブル名:memo_tblにカラム名;memoが1つで20行くらいのデータがあります
こんな感じになると思います。
class TaskDbQuery extends AsyncTask<Void,Void, List<String>> {
...
@Override
protected List<String> doInBackground(Void... params) {
List<String> result = new ArrayList<String>();
try {
...
while (rs.next()) {
result.add(rs.getString(1));
}
...
} catch (Exception e) {
...
}
return result;
}
@Override
protected void onPostExecute(List<String> result) {
// 引数の result が、一行のデータをそれぞれ抱えている List<String>
...
}
AsyncTask のジェネリックの型の三番目 Result に、List<String> を指定する。
doInBackground() は ArrayList<String> を返し、onPostExecute() が、それを受け取る。