首先让我说我已经搜索了很长时间,发现了很多类似的问题(关于 SO),但我还找不到任何解决这个问题的方法:
我有一个Service
通过调用 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) {
// not bound yet, then bind to the service.
Intent intent = new Intent(this, jobcrawler.class);
bindService(intent, myConnection, Context.BIND_AUTO_CREATE);
}
现在,我在调用 bindservice 的那一行得到了 nullpointerexemption。请注意,我实际上还没有尝试对服务做任何事情。我只是想绑定它。任何帮助将不胜感激......如果我有头发,我会把它拔出来!哈哈
这是我认为相关的一些附加代码。我的连接:
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());