2017-04-10 65 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(); 
     } 
    }; 
相关问题