2012-12-22 38 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

相關問題