2014-11-17 39 views
0

在Android中,我需要在數據庫查詢之後啓動一個服務,以便我可以從應用程序請求丟失的字節。我打電話這樣說:如何從SQLiteOpenHelper類中調用服務?

Intent service = new Intent("br.com.company.intent.DO_CHUNK_REQUEST"); 
service.putExtra("FIELD_NAME", fieldName); 
service.putExtra("JOB_NAME", jobName); 
service.putExtra("START_BYTE", 500); 
service.putExtra("LENGTH", 100); 
AWS myCall = new AWS(); 
myCall.chama_servico(service); 

,我創建了另一個類爲「服務調用者」的工作,因爲我不能在同一時間我班擴大到SQLiteOpenHelper和服務。我的班級是這樣的:

package br.com.company.AWService; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 

public class AWS extends Service { 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    public void chama_servico (Intent service) { 
     startService(service); 
    } 
} 

但是當我運行這段代碼時,我在startService(service)處得到一個NullPointerException異常。我究竟做錯了什麼?在數據庫查詢之後是否有更好/正確的方式來調用服務?

謝謝!

+0

「在數據庫查詢之後是否有更好/正確的方式來調用服務?」 - 讓查詢調用服務的任何人。 – CommonsWare

+0

問題是查詢可能導致對服務的多個調用。我必須將所有丟失的字節存儲在列表或hashMap中。 –

+0

這不是問題在服務中,有一個名爲onStartCommand()的方法,當您啓動服務時將始終調用此方法,並且如果您希望避免此問題,則可以通過使FLAG知道服務已在運行來控制該方法。 –

回答

0

我們決不會在代碼服務的對象。你必須重新審視服務理念..

AWS myCall = new AWS();// Bad Practice 

,如果它的業務需求是的,我們能做到這一點,並確保在不同的線程中運行的服務代碼默認情況下服務符號與它被調用的地方相同。