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() が、それを受け取る。
あ、フォローできないうちに終わってた (^^;
2014/04/08 17:11:51薄々、気づかれてると思いますが、ぼくは 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 19:07:09助かります
私こそ当初の質問とは別な虫のいい質問をさせていただき
申し訳ありませんでした
今回、悩んで悩んで行きずまって質問をさせていただいたところ
すぐに回答をいただき、そのコードを見たときには、
「お、やったね」って感じで感激(感謝)しました
これでできると思いうれしくなりました
やはりjavaの基礎が身についていないためと痛感しています
「adapter.add(result); 」の部分ですが
戻り値が1行、1行になっているとのことですので、じゃあそれをどうるか?だと思い
当初のforでループしてうまくいかず、
for (String str : result) {
adapter.add(str);
}
にしたらうまくいきました
これで先へ進めることができます
今回のDBデータの分割(List<String>にする方法)の部分が解決できてスッキリした気分です
大変感謝しています(ありがとうございました)