首先让我说我现在谷歌搜索超过两个小时了,我似乎无法找到任何解决这个问题的方法。在SO上发现了很多类似的问题,但迄今为止没有一个解决方案有效。
我的情况是这样的: 我有通过调用startservice()启动的服务(jobcrawler)。 在这个服务中,我正在启动一个长时间运行的线程,它在某个时候调用一个类(webservice),它的init看起来像这样:
public webservice(Context context) {
this.context = context;
this.db = new DatabaseHandler(this.context);
this.access_token = db.getAuthKey();
}
在一些网络调用之后,类(webservice)在名为recieveData()的方法中接收数据。 在recieveData内部我试图绑定到服务,如下所示:
if(!isBound){
//If we're not bound yet, then bind to the service.
Intent intent = new Intent(this, jobcrawler.class);
bindService(intent, myConnection, Context.BIND_AUTO_CREATE);
}
现在,我在调用bindservice的行上获得了nullpointerexemption。请注意,我实际上并没有尝试使用该服务。我只是想绑定它。 任何帮助将不胜感激...如果我有头发我会把它拉出来!大声笑
这是我认为相关的一些额外代码。 myConnection:
private ServiceConnection myConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,IBinder service) {
Log.e("webservice", "service is connected");
MyLocalBinder binder = (MyLocalBinder) service;
myService = binder.getService();
isBound = true;
}
public void onServiceDisconnected(ComponentName arg0) {
Log.e("webservice", "service is disconnected");
isBound = false;
}
};
来自服务的活页夹MyLocalBinder:
public class MyLocalBinder extends Binder {
public jobcrawler getService() {
Log.e("Job Crawler", "returning self");
return jobcrawler.this;
}
}
服务的onbind方法:
private final IBinder myBinder = new MyLocalBinder();
@Override
public IBinder onBind(Intent arg0) {
Log.d("JobCrawler Service", "Service is bound");
return myBinder;
}
哦,这是我从服务中的线程加载类的地方,以防万一我应该使用不同的上下文或其他东西:
private webservice ws= new webservice(getBaseContext());
答案 0 :(得分:0)
我知道它有点晚了,但我遇到了同样的问题,也许一些googlers会很高兴:)
所以对我来说,以下工作: 在引用您的上下文时调用bindService方法:
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)