Исключение NullPointerException в "onActivityResult" библиотеки In-App-Billing V3 - PullRequest
0 голосов
/ 30 мая 2018

У меня возникла небольшая проблема с исключением NullPointerException в моем приложении после завершения тестовой покупки через библиотеку In Billing V3.

Я могу успешно вызвать тестовую покупку, просто щелкнув конкретный пункт меню.Моя проблема в том, что после закрытия окна тестовой покупки вместо получения информации о том, был ли предмет уже куплен, или какой-либо другой информации в logcat, он выдает ошибку NPE, как я вставлю ниже:

Error in handleActivityResult
    java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
        at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
        at org.json.JSONTokener.nextValue(JSONTokener.java:94)
        at org.json.JSONObject.<init>(JSONObject.java:156)
        at org.json.JSONObject.<init>(JSONObject.java:173)
        at com.anjlab.android.iab.v3.BillingProcessor.handleActivityResult(BillingProcessor.java:932)
        at com.example.android.visitri.MainActivity.onActivityResult(MainActivity.java:806)
        at android.app.Activity.dispatchActivityResult(Activity.java:6931)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4090)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4137)
        at android.app.ActivityThread.-wrap20(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1529)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6123)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

В противном случае кажется, что моя настройка функций библиотеки для биллинга в приложении правильная?Может быть, я получаю эту ошибку NPE, чтобы выбросить, потому что я просто использую пробную покупку или что-то с моей настройкой неправильно?

Вы можете найти onActivityResult (где возникает ошибка) в нижней части кода, вставленного ниже.

BillingProcessor bp;

---

bp = BillingProcessor.newBillingProcessor(this, null, this);
bp.initialize();

---

if (i == R.id.more_menu) {
            View menuItemView = findViewById(R.id.more_menu);
            PopupMenu popup = new PopupMenu(this, menuItemView);
            // Inflate the menu from xml
            popup.inflate(R.menu.popup_more_menu);
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.menu_remove_ads:
                            boolean isAvailable =
                                    BillingProcessor.isIabServiceAvailable(MainActivity.this);
                            // If the Play Store isn't installed on the phone (if it's a certain
                            // Chinese phone, older phone, or otherwise), don't run the purchase.
                            if (!isAvailable) {
                                return true;
                            }
                            // Checks to see if Billing is supported,
                            // and if it is, run the purchase.
                            boolean isOneTimePurchaseSupported = bp.isOneTimePurchaseSupported();
                            if (isOneTimePurchaseSupported) {
                                bp.purchase(MainActivity.this, "android.test.canceled");
                            }
                            return true;
                    }
                }
            });

---

@Override
    public void onBillingInitialized() {
        /*
         * Called when BillingProcessor was initialized and it's ready to purchase
         */
    }

    @Override
    public void onProductPurchased(@NonNull String productId, @Nullable TransactionDetails details) {
        /*
         * Called when requested PRODUCT ID was successfully purchased
         */
    }

    @Override
    public void onBillingError(int errorCode, @Nullable Throwable error) {
        /*
         * Called when some error occurred. See Constants class for more details
         *
         * Note - this includes handling the case where the user canceled the buy dialog:
         * errorCode = Constants.BILLING_RESPONSE_RESULT_USER_CANCELED
         */
    }

    @Override
    public void onPurchaseHistoryRestored() {
        /*
         * Called when purchase history was restored and the list of all owned PRODUCT ID's
         * was loaded from Google Play
         */
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (!bp.handleActivityResult(requestCode, resultCode, data)) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    @Override
    public void onDestroy() {
        if (bp != null) {
            bp.release();
        }
        super.onDestroy();
    }

Большое спасибо за любой совет или вклад, который вы могли бы получить для меня!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...