2012-03-21 69 views
1

我得到了绑定的活动和服务。Android:收到null的AIDL参数

当onServiceConnected是所谓的ServiceConnection,我做的下一件事:

mInterfaceObject = IInterface1.Stub.asInterface(arg1); 

mInterfaceObject.register(mController); 

其中mController是:

private final IInterface2.Stub mController = new IInterface2.Stub() { 

两个IInterface1和IInterface2是AIDL文件。

现在的问题。 在服务中执行注册。该参数将为空。

我在做什么错?

回答

4

Eclipse将自动添加的下一个方法

@Override 
    public IBinder asBinder() { 
     return null; 
    }; 

这弄乱了整个通信。此方法不应被覆盖。

2

这是我的服务实现。我有2个aidl文件IService & IDataServiceCallback。

private ServiceConnection mConnection = new ServiceConnection() 
{ 
    public void onServiceConnected(ComponentName className, IBinder service) 
    { 
     serv = iService.Stub.asInterface((IBinder)service); 

     try 
     { 
       serv.registerCallback(mCallback); 
     } 
     catch (RemoteException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

    public void onServiceDisconnected(ComponentName className) 
    { 
     try 
     { 
      serv.unregisterCallback(mCallback); 
     } 
     catch(RemoteException e) 
     { 
      e.printStackTrace(); 
     } 
     serv = null; 
    } 
}; 

这是我的mCallback部分。

private iDataServiceCallback mCallback = new iDataServiceCallback.Stub() 
{ 

    @Override 
    public void updateResponse(String text) throws RemoteException 
    { 
     // TODO Auto-generated method stub 

     } 

    @Override 
    public void loginResponse(String text) throws RemoteException { 
     // TODO Auto-generated method stub 
     Message msg = Message.obtain(); 

     msg.obj = text; 

     handler.sendMessage(msg); 
    } 


}; 

在服务方面我已经实现了这一点。

@Override 
public IBinder onBind(Intent arg) { 
    // TODO Auto-generated method stub 
    return mBinder; 
} 



private final iService.Stub mBinder = new iService.Stub() 
{ 

    @Override 
    public void registerCallback(iDataServiceCallback cb) throws RemoteException { 
     // TODO Auto-generated method stub 
     if (cb != null) 
     { 
      mCallbacks.register(cb);   
     } 
    } 

    @Override 
    public void unregisterCallback(iDataServiceCallback cb) throws RemoteException { 
     // TODO Auto-generated method stub 

     if (cb != null) mCallbacks.unregister(cb); 

    } 

这里是IService.aidl

package com.nishant.phototest; 

import com.nishant.phototest.iDataServiceCallback; 

interface iService 
{ 
    void doLogin(String ip,String port); 

    void updatePhoto(in byte[] data); 

    void registerCallback(iDataServiceCallback cb); 

    void unregisterCallback(iDataServiceCallback cb); 
} 

这里是IDataServiceCallBack.aidl

package com.nishant.phototest; 

oneway interface iDataServiceCallback 
{ 
    void loginResponse(String text); 

    void updateResponse(String text); 
} 

希望这将帮助你。

+0

感谢您的文章,我得到了几乎相同的东西。但是在这里cb将是空的。你还可以发布你的AIDL文件吗? – 2012-03-21 09:31:26

+0

请检查aidl文件。 – 2012-03-21 09:40:19

+0

没有区别。坏...奇怪,我得到了同样的东西,但它收到空.... – 2012-03-21 09:47:52