Handler问题 android Handler 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是71行嘛,可能那个getMainLooper没必要? 不写的话 会报这个Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();会报只能有一个 looper 不写的话 会报这个Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();会报只能有一个 looper这样的,如果你这个handler的创建是在oncreate里,那么不会出错。但是我估计你是在oncreate之外的。也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity { Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); }}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more 不写的话 会报这个Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();会报只能有一个 looper这样的,如果你这个handler的创建是在oncreate里,那么不会出错。但是我估计你是在oncreate之外的。也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity { Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); }}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more 不写的话 会报这个Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();会报只能有一个 looper这样的,如果你这个handler的创建是在oncreate里,那么不会出错。但是我估计你是在oncreate之外的。也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity { Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); }}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more亲,你再认真看下,你自己看看哪个代码是先初始化的. 不写的话 会报这个Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();会报只能有一个 looper这样的,如果你这个handler的创建是在oncreate里,那么不会出错。但是我估计你是在oncreate之外的。也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity { Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); }}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more亲,你再认真看下,你自己看看哪个代码是先初始化的.按照您说的代码 我重新改过 把handler 放到onCreate里面然后下面就是线程调用某个方法 返回的是一串字符串在线程调用handler时 报了如下错误12-04 10:10:01.911: E/AndroidRuntime(1099): FATAL EXCEPTION: Thread-10612-04 10:10:01.911: E/AndroidRuntime(1099): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()12-04 10:10:01.911: E/AndroidRuntime(1099): at android.os.Handler.<init>(Handler.java:121)12-04 10:10:01.911: E/AndroidRuntime(1099): at com.example.webtest.MainActivity$2.run(MainActivity.java:67)12-04 10:10:01.911: E/AndroidRuntime(1099): at java.lang.Thread.run(Thread.java:856) 线程里直接用主线程的handler?不对吧。线程是要发消息给主线程的,例如在主线程ui的修改!你可以在new 线程的时候,给予线程一个构造函数,传入主线程的handler例如: public MyThread(Handler handler)//handler是主线程的 { this.handler=handler;//获取主线程的handler } //之后在想自己想要的地方发消息给主线程 Message msg = handler.obtainMessage(OtherMessage.GET_SUCCESS); //消息是自定义的,这里发的是空消息 handler.sendMessage(msg); //发送消息,然后去主线程处理这个消息 还有其他方法。。如果还是不懂可以去网上找例子 Android MediaRecord 录像问题 Android 本地文档为什么打开很慢很慢? android 读取相册图片的时候图片翻转了 求教android手机坐标系问题 如何寻星,及确定GPS的数据可用 android 如何显示7M的高清图片 建立一个Android开发环境需要哪些软件? xmpp连接openfier服务器问题 listview滑动时item里的图片异常 adb拒绝访问,是个什么情况 Android对老项目重新开发要注意什么? 华为P6 openGL 初始化问题
会报这个
Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();
会报只能有一个 looper
会报这个
Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();
会报只能有一个 looper
这样的,如果你这个handler的创建是在oncreate里,那么不会出错。
但是我估计你是在oncreate之外的。
也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity {
Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main
12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)
12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)
12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more
会报这个
Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();
会报只能有一个 looper
这样的,如果你这个handler的创建是在oncreate里,那么不会出错。
但是我估计你是在oncreate之外的。
也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity {
Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main
12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)
12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)
12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more
会报这个
Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();
会报只能有一个 looper
这样的,如果你这个handler的创建是在oncreate里,那么不会出错。
但是我估计你是在oncreate之外的。
也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity {
Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main
12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)
12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)
12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more
亲,你再认真看下,你自己看看哪个代码是先初始化的.
会报这个
Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();
会报只能有一个 looper
这样的,如果你这个handler的创建是在oncreate里,那么不会出错。
但是我估计你是在oncreate之外的。
也就是把这个当作一个内部类创建的。这样,还未oncreate的时候就尝试MainActivity.this就会造成空指针异常我建了一个空项目试验,结果证实public class MainActivity extends Activity {
Handler handler=new Handler(MainActivity.this.getMainLooper()){@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}12-04 17:13:04.812: E/AndroidRuntime(25510): FATAL EXCEPTION: main
12-04 17:13:04.812: E/AndroidRuntime(25510): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.MainActivity}: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2303)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.access$600(ActivityThread.java:171)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Handler.dispatchMessage(Handler.java:107)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.os.Looper.loop(Looper.java:194)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.main(ActivityThread.java:5468)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invokeNative(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.reflect.Method.invoke(Method.java:525)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:934)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:701)
12-04 17:13:04.812: E/AndroidRuntime(25510): at dalvik.system.NativeStart.main(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): Caused by: java.lang.NullPointerException
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:104)
12-04 17:13:04.812: E/AndroidRuntime(25510): at com.example.android.MainActivity.<init>(MainActivity.java:10)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstanceImpl(Native Method)
12-04 17:13:04.812: E/AndroidRuntime(25510): at java.lang.Class.newInstance(Class.java:1319)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.Instrumentation.newActivity(Instrumentation.java:1124)
12-04 17:13:04.812: E/AndroidRuntime(25510): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)
12-04 17:13:04.812: E/AndroidRuntime(25510): ... 11 more
亲,你再认真看下,你自己看看哪个代码是先初始化的.
按照您说的代码 我重新改过 把handler 放到onCreate里面
然后下面就是线程调用某个方法 返回的是一串字符串
在线程调用handler时 报了如下错误12-04 10:10:01.911: E/AndroidRuntime(1099): FATAL EXCEPTION: Thread-106
12-04 10:10:01.911: E/AndroidRuntime(1099): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-04 10:10:01.911: E/AndroidRuntime(1099): at android.os.Handler.<init>(Handler.java:121)
12-04 10:10:01.911: E/AndroidRuntime(1099): at com.example.webtest.MainActivity$2.run(MainActivity.java:67)
12-04 10:10:01.911: E/AndroidRuntime(1099): at java.lang.Thread.run(Thread.java:856)
线程里直接用主线程的handler?
不对吧。线程是要发消息给主线程的,例如在主线程ui的修改!
你可以在new 线程的时候,给予线程一个构造函数,传入主线程的handler
例如: public MyThread(Handler handler)//handler是主线程的
{
this.handler=handler;//获取主线程的handler
}
//之后在想自己想要的地方发消息给主线程
Message msg = handler.obtainMessage(OtherMessage.GET_SUCCESS); //消息是自定义的,这里发的是空消息
handler.sendMessage(msg); //发送消息,然后去主线程处理这个消息 还有其他方法。。如果还是不懂可以去网上找例子