Can't create handler inside thread that has not called Looper.prepare()

03-09 14:29:13.641: E/AndroidRuntime(8368): FATAL EXCEPTION: Thread-34444
03-09 14:29:13.641: E/AndroidRuntime(8368): Process: com.xxxxx, PID: 8368
03-09 14:29:13.641: E/AndroidRuntime(8368): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.os.Handler.<init>(Handler.java:208)
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.os.Handler.<init>(Handler.java:122)
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.view.GestureDetector$GestureHandler.<init>(GestureDetector.java:251)
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.view.GestureDetector.<init>(GestureDetector.java:355)
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.view.ScaleGestureDetector.setQuickScaleEnabled(ScaleGestureDetector.java:475)
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.view.ScaleGestureDetector.<init>(ScaleGestureDetector.java:213)
03-09 14:29:13.641: E/AndroidRuntime(8368): at android.view.ScaleGestureDetector.<init>(ScaleGestureDetector.java:186)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.king.photo.zoom.VersionedGestureDetector$FroyoDetector.<init>(VersionedGestureDetector.java:238)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.king.photo.zoom.VersionedGestureDetector.newInstance(VersionedGestureDetector.java:26)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.king.photo.zoom.PhotoViewAttacher.<init>(PhotoViewAttacher.java:140)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.king.photo.zoom.PhotoView.<init>(PhotoView.java:32)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.king.photo.zoom.PhotoView.<init>(PhotoView.java:26)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.king.photo.zoom.PhotoView.<init>(PhotoView.java:22)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.clockrock.pla.activity.PhotoActivity.initListViews(PhotoActivity.java:116)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.clockrock.pla.activity.PhotoActivity.access$2(PhotoActivity.java:112)
03-09 14:29:13.641: E/AndroidRuntime(8368): at com.clockrock.pla.activity.PhotoActivity$2.run(PhotoActivity.java:104)

03-09 14:29:13.641: E/AndroidRuntime(8368): at java.lang.Thread.run(Thread.java:848)


出现这个问题很蛋疼,错误的核心就是:在主线程里面调用了异步进程,但是却对UI进行了操作,就会出现这样的问题,子线程在处理过程中是绝对不能操作UI的,包含刷新UI,新增加一个UI等,都是不被允许的,一定要在异步进程处理完返回消息再去处理UI,


一般出现问题的核心地方就在

Runnable networkTask = new Runnable() {  
 
   @Override  
   public void run() {
                 这里面你处理了UI操作,那就错了
   }  
}; 

或者是使用了:

AsyncTask
这里面的 doInbackground里面也进行了UI操作,可能都会报这样的错误


解决办法就是:

把UI处理放到消息处理里面进行操作,就解决问题了

private Handler getDateHandler = new Handler() {
public void handleMessage(Message msg) {
Log.i("TAG", "-----3");
String result = (String) msg.obj;
switch (msg.what) {
case 100:
for(int j=0;j<bitmap.size();j++){
Log.i("TAG", bitmap.size()+"-----5");
initListViews(bitmap.get(j));
}
pager.removeAllViews();

adapter.setListViews(listViews);
adapter.notifyDataSetChanged();
pager.setCurrentItem(0);
break;
}
}
};

上面的代码是我用来测试,从网络上加载图片,使用viewpager布局切换,其中initListViews就是增加一张图片,那么必须要重新刷新布局,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值