IAB-Helfer ist nicht eingerichtet. Kann nicht ausführen: queryInventory
Bin ich versucht zu implementieren, in-app-billing-API in meiner app, aber wenn ich meine app es trows eine Ausnahme. Dies ist das erste mal, dass ich es mit in-app-billing-API. Dies ist das Protokoll der Ausnahme, dass ich immer:
Process: koemdzhiev.com.quickshoppinglist, PID: 10604
java.lang.RuntimeException: Unable to start activity ComponentInfo{koemdzhiev.com.quickshoppinglist/koemdzhiev.com.quickshoppinglist.ui.MainActivity}: java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
at android.app.ActivityThread.access$900(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Caused by: java.lang.IllegalStateException: IAB helper is not set up. Can't perform operation: queryInventory
at koemdzhiev.com.quickshoppinglist.utils.IabHelper.checkSetupDone(IabHelper.java:782)
at koemdzhiev.com.quickshoppinglist.utils.IabHelper.queryInventoryAsync(IabHelper.java:610)
at koemdzhiev.com.quickshoppinglist.utils.IabHelper.queryInventoryAsync(IabHelper.java:639)
at koemdzhiev.com.quickshoppinglist.ui.MainActivity.queryPurchasedItems(MainActivity.java:187)
at koemdzhiev.com.quickshoppinglist.ui.MainActivity.onStart(MainActivity.java:193)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
Mein code in der main-Aktivität:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private Toolbar mToolbar;
private RecyclerView mRecyclerView;
private ArrayList<String> shoppingListItems;
private SharedPreferences mSharedPreferences;
private SharedPreferences.Editor mEditor;
private TextView mEmptyTextView;
private ShoppingListAdapter adapter;
private ActionButton actionButton;
private MaterialDialog addItemdialog = null;
private AdView mAdView;
private IabHelper mHelper;
private String SKU_REMOVE_ADDS = "remove_adds_sku";
private boolean mIsRemoveAdds = false;
private IabHelper.OnIabPurchaseFinishedListener mPurchasedFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
else if (purchase.getSku().equals(SKU_REMOVE_ADDS)) {
//consume the gas and update the UI
mIsRemoveAdds = true;
mAdView.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,"Purchase successful",Toast.LENGTH_LONG).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String publicKey = s1+s2+s3+s4+s5;
mHelper = new IabHelper(this,publicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
@Override
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
//error
Log.d(TAG, "Proglem setting up in-app Billing: " + result);
}
//Horay, IAB is fully set up!
Log.d(TAG, "Horay, IAB is fully set up!");
queryPurchasedItems();
}
});
private void queryPurchasedItems() {
//check if user has bought "remove adds"
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
//handle error here
Toast.makeText(MainActivity.this,"error",Toast.LENGTH_LONG).show();
}
else{
//does the user have the premium upgrade?
mIsRemoveAdds = inventory.hasPurchase(SKU_REMOVE_ADDS);
if(!mIsRemoveAdds) {
Toast.makeText(MainActivity.this,"no premium",Toast.LENGTH_LONG).show();
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}else{
mAdView.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,"premium",Toast.LENGTH_LONG).show();
}
}
}
};
mHelper.queryInventoryAsync(mGotInventoryListener);
}
@Override
protected void onStart() {
super.onStart();
queryPurchasedItems();
isListEmpty();
}
@Override
protected void onResume() {
super.onResume();
queryPurchasedItems();
isListEmpty();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
mAdView.destroy();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich bekam ich die ganze Sache zu arbeiten und haben nicht diese Ausnahme "IAB-Helfer ist nicht eingerichtet. Kann nicht ausführen: queryInventory" oder eher, dass ich immer "Kann nicht gestartet werden, async Betrieb (verbraucht), weil ein anderer async Betrieb(verbrauchen), ist in Bearbeitung".
Die erste Sache, die Sie tun müssen, ist fügen Sie 2 Methoden in der IabHelper.java Klasse:
und als auf Ihre Haupttätigkeit:
Und jetzt, wie es empfohlen in den Google - guide für die API haben wir zu prüfen, welche Elemente der Benutzer gekauft hat auf starten oder fortsetzen Methoden. Hier müssen wir die zwei Methoden, die wir Hinzugefügt IabHelper.java Klasse.
Ihre OnIabSetupFinishedListener überprüft
(!Ergebnis.isSuccess())
aber nicht zurück oder Abbrechen, hier im Fall der resulst NICHT erfolgreich.
Ich denke, dass Ihr mHelper.startSetup schlägt fehl ,und Sie sind nicht der Umgang mit diesem Fehler.