项目中使用的SingleMessageView,控件实例化后,点击用户头像,此时跳转到UserInfo里查看这个用户的头像、用户名、签名、标签。

之前,师兄在SingleMessage里写了个头像的点击响应,点击用户头像,把用户的用户名通过intent传给UserInfo,同时执行想服务器获取这个用户的签名和标签的异步任务,把这两个值也通过同一个intent传递过去,然后UserInfo的onResume()函数接收intent,进行主线程ui布局的更新,源代码如下:

//other用户头像响应
private ImageView.OnClickListener userHeadImgViewListener=new ImageView.OnClickListener() { @Override
public void onClick(View v) { String userNameTemp =users_name;
String 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 Auto-generated method stub
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);
String head_img_url= getAppPath() +"/user_portrait/"+users_name+".jpg";
intent.putExtra("head_img_url", head_img_url);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//标志位用来区分是哪个activity传过来的intent
SingleMessageView.this.getContext().startActivity(intent);
Log.v("head_img_click","success"); } } ;

在userInfo的onResume()中:

//在onResume中获取intent的用户名、头像路径、标签、签名

 Intent intent = getIntent();
String other_head_img_url=intent.getStringExtra("head_img_url");
String name=intent.getStringExtra("name");
String label=intent.getStringExtra("label");
String 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);

调试结果就是:在singleMessage里获取到的签名和标签,intent怎么都获取不到。。。按照正常的逻辑,以为执行异步任务,把值都赋值给全局变量sign、label,然后会返回到用户头像响应的方法里面,接着执行intent的传值操作,逻辑没有正常运行的原因就是异步任务是个很自由的类,你限制人家自由太多了。。。

异步任务的执行时间和返回,不受ui主线程的控制,主线程不会乖乖的等异步任务执行完,在去接着执行异步任务下面的语句,这样异步任务的意义也就没有木有了。。

所以,更新ui主线程的操作一定要放在异步任务的post方法里面,主线程该干嘛干嘛,既然你用到了异步任务,就让异步任务把该做完的做完,并且,这个异步任务的位置一定要放在与ui主线程同一个activity里面!

所以,最后,我们的解决方法就是在singleMessage里,点击用户头像,把用户名通过intent传过去,同时跳转到userInfo,在userInfo的onResume()里,接收intent后,执行自定义的otherInfo(othername)方法,otherInfo(String othername)这个方法里,执行异步任务webTaskForOtherINfo();把用户名传给异步任务,然后在UserInfo里定义webTaskForOtherINfo()这个类,执行向服务器请求标签、签名任务,在post函数里执行更新UI控件的更新,就ok啦。。。。。。

ui主线程控件的更新就让这个activity的异步任务做完整的更多相关文章

  1. c#多线程(UI线程,控件显示更新) Invoke和BeginInvoke 区别

    如果只是直接使用子线程访问UI控件,直接看内容三,如果想深入了解从内容一看起. 一.Control.Invoke和BeginInvoke方法的区别 先上总结: Control.Invoke 方法 (D ...

  2. [转] c#多线程(UI线程,控件显示更新) Invoke和BeginInvoke 区别

    如果只是直接使用子线程访问UI控件,直接看内容三,如果想深入了解从内容一看起. 一.Control.Invoke和BeginInvoke方法的区别 先上总结: Control.Invoke 方法 (D ...

  3. Handler机制来处理子线程去更新UI线程控件

    public class HandlerTestActivity extends Activity { private TextView tv; private static final int UP ...

  4. C#中Invoke的用法()-解决子线程访问主线程控件、线程安全等问题

    引自https://www.cnblogs.com/lsgsanxiao/p/5523282.html invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概 ...

  5. C# 跨线程访问或者设置UI线程控件的方法

    一.背景 在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误. 二.问题解决方法 使用控件自带的Invoke或者BeginInvoke ...

  6. Android子线程更新UI主线程方法之Handler

    背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. ...

  7. Android UI主线程与子线程

    一个Android 程序默认情况只有一个进程,但是一个进程可以有多个线程.其中有一个UI 线程也称为UI主线程,UI Thread在Android程序运行的时候就被创建,主要是负责控制UI界面的显示. ...

  8. 在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储

    在上篇随笔<在Winform开发中使用日程控件XtraScheduler>中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如 ...

  9. dhtmlxScheduler日历日程控件包括天视图,周视图,月视图,年视图和日程表视图

    dhtmlxScheduler 是一个基于Web的类似于Outlook的日历日程控件. 它完全由javascript/js/css编写, 提供类似于MS Outlook Calendar, Apple ...

随机推荐

  1. Json解析异常处理方式(JSONException: Value of type java.lang.String cannot be converted to JSONObject)

    有一次从服务器解析获取到的Json字符串突然报了这个异常,由于这个json是从 php页面上推送过来的,当时就查是不是由于编码问题引起的,所以就上网搜了,网上大部分都是说由于utf-8的bom头引起的 ...

  2. 上传Android或Java库到Maven central repository(转载)

    主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库. 是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用 ...

  3. R语言——绘图函数深入学习

    利用R自带数据集 通过data()函数可以查看R自带数据集. > data() 返回以下结果,每一条记录都是一个数据,键入相应的数据名称可以查看具体信息. Data sets in packag ...

  4. 交换数组中两个元素的位置,元素包括key和value 一维数组

    /*author: yangyu@sina.cndescription: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子*/$arr = array(11=>'a', ...

  5. Windows API 之 CreateThread、WaitForSingleObject(未完)

    WaitForSingleObject Waits until the specified object is in the signaled state or the time-out interv ...

  6. 2015十大顶级开源ERP系统点评

    如今,企业资源规划(ERP)和客户关系管理(CRM)系统的必要性已经被各种组织和企业所认可:ERP和CRM能够直接为企业的业务效率和利润做出贡献. 但是随着今天企业商业形态的日趋多样化,互联网新经济的 ...

  7. AutoFac使用方法总结

    AutoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法 ...

  8. notify vs nofifyall

    http://stackoverflow.com/questions/37026/java-notify-vs-notifyall-all-over-again Do you want to tell ...

  9. ZF-关于海南的增删改需求

    ,) ,,) ,) '); select * from SYS_ORGAN where org_name = '区教体局' update sys_organ set org_name = '综合行政执 ...

  10. dom元素循环绑定事件的技巧

    以前总觉得自己写的代码不太规范,尤其是写原生的时候.举个例子: 要为页面上所有".a"的元素绑定事件,当然了用jquery很方便:$('.a').bind("click& ...