远程服务不绑定/ asInterface返回“空”

问题描述:

this本书创造了一个远程服务的实例后,尝试这项活动能够结合它:远程服务不绑定/ asInterface返回“空”

public class TuCanMobileActivity extends Activity { 
/** Called when the activity is first created. */ 
//private HTTPSbrowser mBrowserService; 
private HTTPBrowserRemote mBrowserRemoteService; 
private Boolean mbound=false; 
private ServiceConnection mBrowserRemoteServiceConnection = 
    new ServiceConnection() {   
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      try { 
       mBrowserRemoteService.unregister_course_callback(courseCallback); 
      } catch (RemoteException e) {} 
     } 

     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      mBrowserRemoteService=HTTPBrowserRemote.Stub.asInterface(service); 
      mbound=true; 
      try { 
       mBrowserRemoteService.register_course_callback(courseCallback); 

      } 
      catch (RemoteException e) { 
       // TODO: handle exception 
      } 
     } 

}; 

private final IClassesCallback courseCallback = 
    new IClassesCallback.Stub() { 
     @Override 
     public void expressClassesdata(HTTPSResponse ClassesResponse) 
       throws RemoteException { 
      Toast.makeText(TuCanMobileActivity.this, "Just works??", Toast.LENGTH_SHORT).show(); 

      final TextView txtLoginName = 
       (TextView) findViewById(R.id.textView1); 
      txtLoginName.setText(ClassesResponse.HTMLResponse); 
     } 
    }; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 
public void onClickSendLogin (final View sfNormal) { 
    final Intent browserIntent = new Intent(TuCanMobileActivity.this,HTTPBrowserRemoteImpl.class); 

    this.bindService(browserIntent, mBrowserRemoteServiceConnection, Context.BIND_AUTO_CREATE); 
    if(mbound==true){ 
     Toast.makeText(TuCanMobileActivity.this, "Service Bound", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     Toast.makeText(TuCanMobileActivity.this, "Service NOT Bound", Toast.LENGTH_SHORT).show(); 
    } 
    try { 

     mBrowserRemoteService.call_course_overview(); 


    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    /*final Intent i = new Intent(this,MainMenu.class); 
    startActivity(i);*/ 
    unbindService(mBrowserRemoteServiceConnection); 
} 
} 

但mBrowsserRemoteService为空(在方法onClickSendLogin)并返回一个NullPointerException,我不知道为什么?它似乎也不会调用服务中的onBind方法。我的问题在哪里?

在此先感谢 Tyde

你得到一个NullPointerException异常的原因是因为你正在执行

mBrowserRemoteService.call_course_overview(); 

无论mbound的;在那个时候mbound可能是真的或者是假的。

我怀疑一个更大的问题是你无法绑定到这个服务,很可能是因为你的AndroidManifest.xml配置不正确。如果您仍然遇到问题,请发布您的AndroidManifest文件。