2016-10-26 1 views
0

프로젝트를 API 23으로 업그레이드 중입니다. 내 앱이 API 23에서 인앱 결제로 작동하지만 API 22에서 작동합니다. Purchasehandler가 PurchaseItem 메소드를 호출하면 앱이 충돌합니다. launchPurchaseFlow 메소드. 여기 In App Billing이 API 23에서 추락했습니다.

private Context mContext; 
private IabHelper billinHelper; 
public InappPurchaseHandler(Context context) { 
     this.mContext = context; 
     billinHelper = new IabHelper(context, AppPropertyKey.BASE_64_KEY); 
     Toast.makeText(context.getApplicationContext(),"IABHEPLER",Toast.LENGTH_SHORT).show(); 

    } 

public void setonsetupCompleteListener(IabHelper.OnIabSetupFinishedListener listener){ 
     billinHelper.startSetup(listener); 
    } 


public void OnItemInventoryAsyn(IabHelper.QueryInventoryFinishedListener listener){ 

     billinHelper.queryInventoryAsync(listener); 
    } 
public void PurchaseItem(String sku,IabHelper.OnIabPurchaseFinishedListener listener){ 
     //if(billinHelper.isSetupDone() && !billinHelper.isAsyncInProgress())//change 
     if (billinHelper!=null) 
     billinHelper.launchPurchaseFlow((Activity) mContext, sku, IabHelper.ITEM_TYPE_SUBS, 123, listener, ""); 
    } 


public void OnBillingActivityResult(int requestCode,int resultCode,Intent data){ 
     billinHelper.handleActivityResult(requestCode, resultCode, data); 
    } 
public void disposeBillingHelper() { 
      if (billinHelper != null) { 
       billinHelper.dispose(); 
      } 
      billinHelper = null; 
     } 

내가 함수를 호출하는 코드입니다 : 여기
--------- beginning of crash 
10-26 13:24:12.048 3031-3031/com.example.--- E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.---, PID: 3031 
    java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: launchPurchaseFlow 
     at com.android.vending.billing.util.IabHelper.checkSetupDone(IabHelper.java:790) 
     at com.android.vending.billing.util.IabHelper.launchPurchaseFlow(IabHelper.java:380) 
     at com.MyQalam.InappPurchase.InappPurchaseHandler.PurchaseItem(InappPurchaseHandler.java:31) 
     at com.MyQalam.ShalatIndonesian.IndexActivity.onMenuItemSelected(IndexActivity.java:95) 
     at com.android.internal.policy.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1151) 
     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761) 
     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904) 
     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894) 
     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:468) 
     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:129) 
     at android.view.View$PerformClick.run(View.java:21147) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

내 코드입니다

purchaseHandler.PurchaseItem(RemoveAds.SKU, 
        new OnIabPurchaseFinishedListener() { 
         @Override 
         public void onIabPurchaseFinished(IabResult result, 
                  Purchase info) { 
          if (result.isSuccess()) { 
           dataManager.setRemoveAds(true); 
           Toast.makeText(IndexActivity.this, 
             "Ads Successfully Removed.", 
             Toast.LENGTH_LONG).show(); 
           RefrshActivity(); 
          } 
         } 
        }); 

답변

0

그 해결책 남자 :

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      purchaseHandler.OnBillingActivityResult(requestCode,resultCode,data)); 
} 
0

나는 충돌이 발생할 에뮬레이터에 인앱 결제를 테스트했다 . 인앱 결제는 에뮬레이터에서 테스트하지 않을 수 있습니다 :

  1. 실제 가입 한 Android 기기는 apk입니다.
  2. 또 다른 하나는 sign apk를 업로드 한 다음 테스트하는 Android 개발자 계정입니다.