2012-12-22 58 views
1

嗨,感谢您的支持。当在绑定服务中实例化Messenger时出现NullPointerException

请给我一个服务,这是我的主要活动。

我尝试实例化服务中的新Messenger信息以与活动进行通信。

Messenger mService = new Messenger(mBinder); 

确切地说,当执行到这一点时,我得到NullPointerException。

这里是服务的代码:

public class LocalService extends Service { 
    public int i; 
    public ArrayList<String> al; 
    // Binder given to clients 
    private final IBinder mBinder = new LocalBinder(); 
    Messenger mService = new Messenger(mBinder); 
    public Task t; 

    /** 
    * Class used for the client Binder. Because we know this service always 
    * runs in the same process as its clients, we don't need to deal with IPC. 
    */ 
    public class LocalBinder extends Binder { 
     LocalService getService() { 
      // Return this instance of LocalService so clients can call public methods 
      return LocalService.this; 
     } 
    } 

    public void sayHello() { 

     // Create and send a message to the service 
     Message msg = Message.obtain(null, 1, 0, 0); 
     try { 
      mService.send(msg); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     Log.e("", "sono nel service"); 
     t= new Task(); 
     t.execute(); 
     return mBinder; 
    } 

这里是我的logcat:

12-22 13:17:03.382: E/AndroidRuntime(1625): FATAL EXCEPTION: main 
12-22 13:17:03.382: E/AndroidRuntime(1625): java.lang.RuntimeException: Unable to instantiate service com.example.quotes.LocalService: java.lang.NullPointerException 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2347) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.app.ActivityThread.access$1600(ActivityThread.java:130) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.os.Looper.loop(Looper.java:137) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at dalvik.system.NativeStart.main(Native Method) 
12-22 13:17:03.382: E/AndroidRuntime(1625): Caused by: java.lang.NullPointerException 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.os.Binder.queryLocalInterface(Binder.java:230) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.os.IMessenger$Stub.asInterface(IMessenger.java:27) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.os.Messenger.<init>(Messenger.java:139) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at com.example.quotes.LocalService.<init>(LocalService.java:21) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at java.lang.Class.newInstanceImpl(Native Method) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at java.lang.Class.newInstance(Class.java:1319) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2344) 
12-22 13:17:03.382: E/AndroidRuntime(1625):  ... 10 more 

回答

-2

问题解决,我张贴这个以防万一它可能是有人感兴趣的:

Messenger是Parcelable,因此可以放入Intent中。调用bindService()的活动在Intent上附加一个Messenger。该服务从Intent获取该Messenger。 当服务需要将消息发送到活动时,服务会在Messenger上发送消息。 主活动的Handler通过handleMessage接收消息。

问题已解决。

+3

答案不清楚,你是如何解决这个问题的。显示一些代码。 – Siddharth

0

不要发送null作为在这一行参数:

Message msg = Message.obtain(null, 1, 0, 0); 
+0

谢谢,但我不明白,如果这与问题有关,因为暂时我甚至不能实例化Messenger。而且,这是一个空的信息吗?还是只包含“1”的? –

+0

'null'不是指消息,而是指'Handler'。 OP是使用这个构造函数:'获取(处理程序h,int是什么,int arg1,int arg2)' – LondonRob

相关问题