远程服务不绑定/ 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文件。