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就是增加一张图片,那么必须要重新刷新布局,