【JAVA】AsyncTaskのonPostExecute()にて,ちっとは楽にUIへ値をセットしたい
関連記事
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
- さすがに激務すぎ,ワロタ! 【2024年12月25日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
- 【#Kotlin】「ことりん」な実装依頼がキター 【2024年10月17日(木)】
Android3.0以降は,http通信をメインスレッドでやるのはご法度
ってことで,AsyncTaskの継承クラスを実装して,通信すべし
が,定石らしいけど,こやつ,UIの各部品に値をセットするのが,かなり面倒
onPostExecute()をオーバーライドして,その中でUIへアクセスしろって書いてあるんじゃが
これヘタすると,http通信の数×画面数分のクラスを準備しかねない事態
なんか妙案はないかねぇ...じゃったんじゃが
結果,動的メソッド機構を使えばいいんじゃね?に行き着いて,実装してみたら
上手くいったんで,ここにソースを書いておきまする
まず,AsyncTaskの継承クラス
public class BackgroudTask extends AsyncTask <Integer, Integer, Integer> { public Class<?> instance; public Object ParentObj; 略 ~~~~ 略 /** * バックグランド処理が完了し、UIスレッドに反映する */ @Override protected void onPostExecute(Integer result) { Class<?>[] c1 = new Class[2]; c1[0] = Object.class; c1[1] = String.class; try { Method meth =instance.getMethod("setUIData", c1); //呼び出すメソッド名と,メソッドに渡す引数の型をセット meth.invoke(instance.newInstance(), ParentObj, m_Str); //実際に呼び出す } catch (NoSuchMethodException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IllegalAccessException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (InvocationTargetException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (InstantiationException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } }この2つに,親UI側のクラス型と,親UIインスタンスをセット
public Class> instance;
public Object ParentObj;
オーバーライドしたonPostExecute()にて
親UI側に定義するパブリックメソッドsetUIData()を呼び出すカラクリを
引数に,ParentObjをセットするのが,ちょいとしたミソでごわす
親UIクラス側
task = new BackgroudTask(); task.instance = MainUI.class; //UI側のクラス型 task.ParentObj = this; //UIのインスタンス task.execute(1); 略 ~~~~ 略 public void setUIData(Object Parentobj, String st) //AsyncTaskのonPostExecute()内から呼び出されるメソッド { MainUI obj2 = (MainUI)Parentobj ; TextView textView = (TextView) obj2.findViewById(R.id.textView6); textView.setText(st); }task.instance = MainUI.class;
task.ParentObj = this;
にて,親の情報をセット
setUIData()には,大回りしてきた親のインスタンス(Parentobj)が渡ってくるんで
キャストしてやると
これで,UI側でイロイロできるはず
AsyncTaskの継承クラスは上手く作ると,1個で済みますわん
いつもの様にバグっていたらすまんこってす(爆
コメント
ご近所にココイチが出来る,らしい
【梅雨】朝から大雨ぇ~ さすが梅雨じゃ(25/5/17)
今日は城主生誕記念日で日本国は祝日,らしい...
兵庫 城崎温泉 旅館で火事 ほぼ消し止められる
東海道新幹線 停電のため運転見合わせ 区間が拡大 原因調査中
【霧島山】新燃岳:活発化してた火山性地震,ピタッと止まった(25/4/26)
今日は落雷,ひょうに厳重警戒じゃげな(25/4/14)
中日本高速道路 ETCシステム障害 7都県 一部の専用レーン閉鎖(25/4/6)
iPhone米価格は相互関税で30─40%上昇か、上位機種は2300ドルも