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行くらいのデータがあります

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/04/08 15:49:42

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

こんな感じになると思います。

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

他4件のコメントを見る
id:a-kuma3

あ、フォローできないうちに終わってた (^^;

薄々、気づかれてると思いますが、ぼくは Android のプログラムを作ったことが無くて(java は、そこそこ分かります)。

シンプルに ListView を使った1カラム+ArrayAdapter のケース。
http://techbooster.org/android/ui/9039/
2カラムで、BaseAdapter を派生した Adapter を自前で実装するケース。
http://sassylog.blogspot.jp/2011/01/androidadapter.html

もっと、ぴったりくるサンプルとかあるのかなあ、と、探してたりしてました。
何はともあれ、解決して良かった :-)

2014/04/08 17:11:51
id:Tkaz

参考情報、気づかっていただきありがとうございます
助かります

私こそ当初の質問とは別な虫のいい質問をさせていただき
申し訳ありませんでした

今回、悩んで悩んで行きずまって質問をさせていただいたところ
すぐに回答をいただき、そのコードを見たときには、
「お、やったね」って感じで感激(感謝)しました
これでできると思いうれしくなりました
やはりjavaの基礎が身についていないためと痛感しています

「adapter.add(result); 」の部分ですが
戻り値が1行、1行になっているとのことですので、じゃあそれをどうるか?だと思い
当初のforでループしてうまくいかず、
for (String str : result) {
adapter.add(str);
}
にしたらうまくいきました
これで先へ進めることができます
今回のDBデータの分割(List<String>にする方法)の部分が解決できてスッキリした気分です
大変感謝しています(ありがとうございました)

2014/04/08 19:07:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません