讓我先說我一直在谷歌上搜索現在了兩個多小時開始,我似乎無法找到任何解決這個問題。在SO上發現了很多類似的問題,但迄今爲止這些解決方案都沒有奏效。Bindservice給NullPointerException異常和onserviceconnected從未被稱爲
我的情況是這樣的: 我有服務(jobcrawler)由調用startService()啓動。 在這個服務,我開始一個長期運行的線程,這在某些時候被調用類(web服務),它的初始化看起來是這樣的:
public webservice(Context context) {
this.context = context;
this.db = new DatabaseHandler(this.context);
this.access_token = db.getAuthKey();
}
一些網絡電話後,類(web服務)接收數據在一個名爲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());
不是100%肯定,但我認爲你的MyLocalBinder定義不正確。你應該創建一個定義你的活頁夾的AIDL文件。 JobCrawler也需要可以在AIDL中進行分類和理想定義。 – Bishnu
那麼,我不能以這種方式綁定到服務?我不確定AIDL是什麼。當我創建綁定代碼時,我正在遵循本教程(http://www.techotopia.com/index.php/Android_Local_Bound_Services_%E2%80%93_A_Worked_Example)。 – Chris
好吧,所以從我能找到的AIDL中可以看出,在應用上下文之外訪問的服務。但我的服務只是嘗試與同一個應用程序中的類進行通信,所以我不應該需要AIDL,對吧? – Chris