2017-04-10 9 views
0

アプリを購入しているソフトウェアを開発しています。 私は店舗を作成しましたactivity、店の唯一の目的は、広告を削除することができます1要素を購入することです。 問題は、ユーザーが既にMainActivityにアイテムを購入したかどうかを確認するプロセスを実装しているときに発生します。 これは私が、接続処理する方法である。具体的には、私はCheckPurchase、私は、ユーザーが実際にアイテムを購入したかどうかを確認するために作成したメソッドを呼び出すことを試みた時はいつでも私の問題が発生し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メソッドが呼び出されます)。

この問題はタイミングが悪いと思われます。 私がそう信じる理由は、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(); 
     } 
    }; 
関連する問題