人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: Tkaz
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

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

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


Tkazさんのコメント
ご回答いただきありがとうございます ジェネリックの使い方や戻り値についてわかっていませんでした ただ、ご指摘の箇所を訂正したのですが、アダプターに知らせる部分。「adapter.add(result); 」のaddがeclipseから「赤x」に なってしまい、addallとすると、今度は、TextView tv = (TextView)activity_test_db11.findViewById(R.layout.list);の部分の 「activity_test_db11」が不適切だと言われてしまいました 何か私の不足があるのでしょうか 恐縮ですがご指摘をいただけますでしょうか

a-kuma3さんのコメント
adapter とある変数は、ArrayAdapter なのでしょうか。 その辺りのコードが省略されてて、よく分かりません。 View についても ListView にデータをセットするんじゃなかったんでしょうか。 なぜ、TextView なんでしょうか?

Tkazさんのコメント
さっそくのご連絡ありがとうございます 記述不足で申し訳ありません 前半部分は下記になります r.layoutに、ListViewを配置し、r.layoutにlist.xmlを作ってTextViewを1つ配置しています そこのTextViewに張り付けていくイメージをしていました 記述が間違っているのでしょうか private ArrayAdapter<String> adapter; private AsyncTask<String, Integer, Long> mTask; private ListView listView; private View mFooter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_db11); listView = (ListView) findViewById(R.id.ListView01); adapter = new ArrayAdapter<String>(this, R.layout.list); mFooter = getLayoutInflater().inflate(R.layout.footer, null); listView.addFooterView(mFooter); // アダプターを設定します listView.setAdapter(adapter); listView.setOnScrollListener(this); //ボタンの取得 Button btn3 = (Button)this.findViewById(R.id.btn3); //リスナーの登録 btn3.setOnClickListener(this);

Tkazさんのコメント
listviewの各行にセットできました 感動です! onPostExecuteのところにコメントいただいた「// 引数の result が、一行のデータをそれぞれ抱えている List<String>」を見直してみました また、a-kuma3さんの2回目の回答をヒントに、自分のループで回して、listViewにセットする部分の記述が間違っていました 大変、ありがとうございます javaの基本ができていないのでなかなか解決できず2週間以上悩みました a-kuma3さんからの最初の回答で処理が基本的に違うのが理解できました やあ、感動です ほんとうに、ありがとうございました。うれしいです!!

a-kuma3さんのコメント
あ、フォローできないうちに終わってた (^^; 薄々、気づかれてると思いますが、ぼくは Android のプログラムを作ったことが無くて(java は、そこそこ分かります)。 シンプルに ListView を使った1カラム+ArrayAdapter のケース。 http://techbooster.org/android/ui/9039/ 2カラムで、BaseAdapter を派生した Adapter を自前で実装するケース。 http://sassylog.blogspot.jp/2011/01/androidadapter.html もっと、ぴったりくるサンプルとかあるのかなあ、と、探してたりしてました。 何はともあれ、解決して良かった <tt>:-)</tt>

Tkazさんのコメント
参考情報、気づかっていただきありがとうございます 助かります 私こそ当初の質問とは別な虫のいい質問をさせていただき 申し訳ありませんでした 今回、悩んで悩んで行きずまって質問をさせていただいたところ すぐに回答をいただき、そのコードを見たときには、 「お、やったね」って感じで感激(感謝)しました これでできると思いうれしくなりました やはりjavaの基礎が身についていないためと痛感しています 「adapter.add(result); 」の部分ですが 戻り値が1行、1行になっているとのことですので、じゃあそれをどうるか?だと思い 当初のforでループしてうまくいかず、 for (String str : result) { adapter.add(str); } にしたらうまくいきました これで先へ進めることができます 今回のDBデータの分割(List<String>にする方法)の部分が解決できてスッキリした気分です 大変感謝しています(ありがとうございました)
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ