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 asp.net webservice 之间上传大文件:比如视频有谁知道怎么做吗 求Android2.3.5 Launcher2 源码 Android google map开发问题!!! android数据同步 能间接写个系统短信对话的视图布局嘛? 防做来电通的号码归属地提示 读取sd卡中多媒体文件名到列表中不能成功,求改正 模块编译/frameworks/ex/chips后生成的东西在哪儿? 安卓开发 新浪微博授权问题 江湖救急小白。安卓studio。 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); //发送消息,然后去主线程处理这个消息 还有其他方法。。如果还是不懂可以去网上找例子