2017-04-10 62 views
0

我正在開發一款應用程序購買軟件。 我創建了一個商店activity,該商店的唯一目的是購買1個元素,允許您刪除廣告。 當我執行檢查用戶是否已購買MainActivity中的項目的過程時,會出現問題。 這是我如何處理連接:Android:如何檢查與商店的連接是否已準備就緒

IInAppBillingService mService; 
    ServiceConnection mServiceConn = new ServiceConnection() { 
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      mService = null; 
     } 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      mService = IInAppBillingService.Stub.asInterface(service); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar myToolbar = (Toolbar) findViewById(R.id.calculator_toobar); 
     setSupportActionBar(myToolbar); 

     //Opening a connection with the store 
     Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); 
     serviceIntent.setPackage("com.android.vending"); 
     bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); 

     //Some more code... 

     CheckPurchase(); 
    } 

更具體地說我的問題,每當我試圖打電話CheckPurchase出現,我創建檢查用戶是否確實買了項目的方法。 在商店活動中,此方法完美地工作,因此我確信這不是該方法的問題(在按下按鈕時調用CheckPurchase方法的商店中)。

我認爲這個問題是由不好的時機造成的。 我之所以這樣認爲的原因是因爲:當我在MainActivity中創建一個按鈕,該按鈕的唯一目的是調用該方法(並且我從onCreate方法中刪除CheckPurchase),則方法CheckPurchase有效,並且我收到了正確的響應。 我認爲問題與建立連接所用的時間有關,並且onCreathe方法太快。

我的問題比變爲:

有沒有辦法等到連接完全建立?

是否有某種命令可用來檢查連接是否準備就緒並設置?

或者我應該簡單地使用something like that

在此先感謝您的幫助。

回答

0

正如我的一位朋友指出的,顯然在連接建立後做最好的方法是使用onServiceConnected方法。

上面的代碼變成:

IInAppBillingService mService; 
    ServiceConnection mServiceConn = new ServiceConnection() { 
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      mService = null; 
     } 

     //In this class everything is done after the connection is established. 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      mService = IInAppBillingService.Stub.asInterface(service); 
      //I added this line of code to make sure that the check was made only after the connection was established 
      CheckPurchase(); 
     } 
    }; 
相關問題