UIメインスレッドコントロールの更新により、このアクティビティの非同期タスクが完了します

  プロジェクトで使用されるSingleMessageView。コントロールがインスタンス化された後、ユーザーのアバターをクリックし、UserInfoにジャンプして、ユーザーのアバター、ユーザー名、署名、ラベルを表示します。
  
  以前は、私の兄弟がSingleMessageでアバターのクリック応答を記述し、ユーザーのアバターをクリックし、インテントを通じてユーザーのユーザー名をUserInfoに渡し、同時にサーバーがユーザーの署名とラベルを取得するように求める非同期タスクを実行しました。同じ目的、その後のUserInfo onResume()関数は意図受信し、メインスレッド更新UIレイアウト上を通過させることによって、ソースコードは以下のようにされている:
  
  bubuko.com、豊胸手術バックル
  
  ユーザに応答して、//他のアバター
  
  プライベートImageView.OnClickListener userHeadImgViewListener =新しいImageViewのを.OnClickListener(){
  
  @Override
  
  ます。public void onClickの(ビューV){
  
  文字列userNameTemp = USERS_NAMEさん;
  
  文字列otheruserData [] = { ""};
  
  otheruserData [0] = userNameTemp; //ユーザ名を取得
  
  @ネットワーク接続を確立、実行要求署名およびタグ付き非同期タスク
  
  ConnectivityManager connMgr =(ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
  
  NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
  
  if(networkInfo!= null && networkInfo.isConnected()){
  
  asyncWebkForOtherinfo = new webTaskForOtherinfo();
  
  if(android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.GINGERBREAD_MR1){
  
  asyncWebkForOtherinfo.executeOnExecutor(
  
  webTaskForOtherinfo.THREAD_POOL_EXECUTOR、otheruserData);
  
  } else {
  
  asyncWebkForOtherinfo.execute(otheruserData);
  
  }
  
  Log.e( "otherinfodown"、 "有网!");
  
  } else {
  
  Log.e( "otherinfodown"、 "没有网络连接、请联网后重试...");
  
  }
  
  // TODO自動生成されたメソッドスタブ
  
  ARUtils.own_information = false;
  
  Intent intent = new Intent(SingleMessageView.this.getContext()、UserInfoActivity.class);
  
  intent.putExtra( "name"、users_name);
  
  intent.putExtra( "label"、othersignature); //非同期タスクによって返されたラベルを取得し、署名
  
  intent.putExtra( "sign"、otherlabel);
  
  文字列head_img_url = getAppPath()+ "/ user_portrait /" + users_name + "
  
  。Jpg "; intent.putExtra( "head_img_url"、head_img_url);
  
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ; //このフラグは、インテントを通過したアクティビティを区別するために使用され
  
  ますSingleMessageView.this.getContext()。StartActivity(intent);
  
  Log.v( "head_img_click"、 "success");
  
  }
  
  };
  
  bubuko.com、Bubuバックル
  
  onResumeのUSERINFO(中)中:
  
  bubuko.com、布ボタン
  
  //インテントのユーザー名、アバターパス、ラベル、署名をonResumeで取得します
  
  インテントインテント= getIntent();
  
  String other_head_img_url = intent.getStringExtra( "head_img_url");
  
  文字列名= intent.getStringExtra( "name");
  
  文字列ラベル= intent.getStringExtra( "label");
  
  文字列sign = intent.getStringExtra( "sign");
  
  userNameText。 setText(name);
  
  signatureConent.setText(label);
  
  myTab.setText(sign);
  
  Bitmap smallBitmap = ARUtils.loadBitmapFile(other_head_img_url、48、48);
  
  userImgButton.setImageBitmap(smallBitmap);
  
  bubuko.com、Bubukoの
  
  デバッグ結果は:singleMessageで取得された署名とラベルは、インテントから取得できません。通常のロジックによれば、非同期タスクの実行を考え、グローバル変数の符号とラベルに値を割り当ててから、ユーザーのアバターレスポンスメソッドに戻り、インテントパス操作を実行します。ロジックが正常に実行されない理由は、非同期タスクが非常に無料のクラスです。あなたは他の人を自由に制限しすぎます。
  
  非同期タスクの実行時間と戻りは、UIメインスレッドの制御下にはありません。メインスレッドは、非同期タスクの実行を素直に待機せず、非同期タスクの下のステートメントを実行するため、非同期タスクの意味はなくなります。
  
  したがって、UIのメインスレッドを更新する操作は、非同期タスクのpostメソッドに配置する必要があります。非同期タスクを使用したので、メインスレッドが行うべきことは、非同期タスクが行ったことを完了させ、この非同期タスクの位置は、メインUIスレッドと同じアクティビティに配置する必要があります。
  
  つまり、最終的には、singleMessageでユーザーのアバターをクリックし、ユーザー名をインテントに渡し、userResume()でuserInfoにジャンプし、インテントを受け取った後、カスタムotherInfoを実行します。 )メソッド、otherInfo(String othername)メソッド、非同期タスクwebTaskForOtherINfo();を実行してユーザー名を非同期タスクに渡し、UserInfoでwebTaskForOtherINfo()クラスを定義し、サーバーからリクエストタグと署名タスクを実行して、 OKで更新UIコントロールの更新を実行します。

おすすめ

転載: www.cnblogs.com/aquariusunny/p/12729879.html