解决方案 »

  1.   

    不是71行嘛,可能那个getMainLooper没必要?
      

  2.   

    不写的话 
    会报这个
    Can't create handler inside thread that has not called Looper.prepare()调用之前写 Looper.prepare();
    会报只能有一个 looper
      

  3.   

    不写的话 
    会报这个
    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
      

  4.   

    不写的话 
    会报这个
    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
      

  5.   

    不写的话 
    会报这个
    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
    亲,你再认真看下,你自己看看哪个代码是先初始化的.
      

  6.   

    不写的话 
    会报这个
    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)
      

  7.   


    线程里直接用主线程的handler?
    不对吧。线程是要发消息给主线程的,例如在主线程ui的修改!
    你可以在new 线程的时候,给予线程一个构造函数,传入主线程的handler
    例如:        public MyThread(Handler handler)//handler是主线程的
    {
    this.handler=handler;//获取主线程的handler
    }
            //之后在想自己想要的地方发消息给主线程
            Message msg = handler.obtainMessage(OtherMessage.GET_SUCCESS); //消息是自定义的,这里发的是空消息
            handler.sendMessage(msg); //发送消息,然后去主线程处理这个消息 还有其他方法。。如果还是不懂可以去网上找例子