2012-04-24 57 views
1

我正在實現一個基於Dungeons示例的結算服務(這是Google推薦你去做的方式)。它由以下事實稍微複雜:在基於Dungeons的賬單服務中,bindService返回NullPointerException

  1. 主要服務類生活在一個庫項目(因爲我想多次代碼)。由於this stackoverflow answer暗示圖書館項目中的服務可能會導致問題,因此我已經將該服務抽象並繼承到了子項目中;這也讓我對每個reskin使用不同的公鑰(這是可取的)。
  2. 有很多UI元素需要知道是否儘快支持帳單。

因此我打電話來檢查功能,如果計費是從第一個活動運行的onCreate()方法支持(實際上任何活動,但隨後偏好將被寫入所以這應該只發生一次)。

在地牢樣品,以檢查代碼,如果計費支持試圖綁定到計費服務從而(從Service類):

boolean bindResult = bindService(
    new Intent(Consts.MARKET_BILLING_SERVICE_ACTION), 
    this, // ServiceConnection. 
    Context.BIND_AUTO_CREATE); 

此呼叫被投擲NullPointerException。我仔細檢查過,這些東西都不爲空;它在內發生的功能,顯然在ContextWrapper.java的第370行。

由於this other stackoverflow answer我想知道,如果從onCreate()查詢結算可能爲時過早,但地下城示例項目再次從這裏調用它,所以我不認爲是這樣。

我使用的是更早的Android版本(3.1),因此可能會產生影響,但我很想知道可能的原因。還有一件事:Eclipse告訴我customIntent爲空,但它並不完全清楚那是指什麼,我也沒有找到太多的東西。

回答

2

答案被證明是非常,非常簡單:我錯過了這一步Activity#onCreate

mBillingService = new BillingService() 

//THIS STEP IS THE CRITICAL STEP 
mBillingService.setContext(this); 
//IF ONLY I HAD KNOWN 

mBillingService.checkBillingSupported(); 

這就要求attachBaseContext(context);

它現在:)