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() が、それを受け取る。