2013-04-13 65 views
0

讓我先說我一直在谷歌上搜索現在了兩個多小時開始,我似乎無法找到任何解決這個問題。在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()); 
+0

不是100%肯定,但我認爲你的MyLocalBinder定義不正確。你應該創建一個定義你的活頁夾的AIDL文件。 JobCrawler也需要可以在AIDL中進行分類和理想定義。 – Bishnu

+0

那麼,我不能以這種方式綁定到服務?我不確定AIDL是什麼。當我創建綁定代碼時,我正在遵循本教程(http://www.techotopia.com/index.php/Android_Local_Bound_Services_%E2%80%93_A_Worked_Example)。 – Chris

+0

好吧,所以從我能找到的AIDL中可以看出,在應用上下文之外訪問的服務。但我的服務只是嘗試與同一個應用程序中的類進行通信,所以我不應該需要AIDL,對吧? – Chris

回答

0

我知道這有點晚,但我跑upo n個同樣的問題,也許有些Google員工會很高興:)

所以對我下面的工作: 調用bindService方法參照您的背景:

context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE) 
相關問題