0

首先让我说我已经搜索了很长时间,发现了很多类似的问题(关于 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());
4

1 回答 1

0

我知道这有点晚了,但我遇到了同样的问题,也许一些谷歌人会很高兴:)

所以对我来说,以下工作:参考您的上下文调用 bindService 方法:

context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)
于 2015-07-22T15:06:35.710 回答