Google в приложении счетов, тост ломает всеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Google в приложении счетов, тост ломает все

Сообщение Anonymous »

Я даже не знаю, какое название должен иметь этот вопрос. Покупка#getskus () .
Это до и после миграции в выставление счетов V4 :
до (v3 библиотека):
private void processPurchases(List
allPurchases, boolean purchasedProductsFetched) {
if (!allPurchases.isEmpty()) {

List signatureValidPurchases = new ArrayList();

//create a list with signature valid purchases
List validPurchases = allPurchases.stream().filter(this::isPurchaseSignatureValid).collect(Collectors.toList());
for (Purchase purchase : validPurchases) {

Optional skuInfo = fetchedSkuInfoList.stream().filter(it -> it.getSkuId().equals(purchase.getSku())).findFirst();
if (skuInfo.isPresent()) {
SkuDetails skuDetails = skuInfo.get().getSkuDetails();

PurchaseInfo purchaseInfo = new PurchaseInfo(generateSkuInfo(skuDetails), purchase);
signatureValidPurchases.add(purchaseInfo);

}
}

if (purchasedProductsFetched) {
fetchedPurchasedProducts = true;
billingEventListener.onPurchasedProductsFetched(signatureValidPurchases);
} else {
billingEventListener.onProductsPurchased(signatureValidPurchases);
}

purchasedProductsList.addAll(signatureValidPurchases);

for (PurchaseInfo purchaseInfo : signatureValidPurchases) {
consume(purchaseInfo);

if (shouldAutoAcknowledge) {
boolean wasConsumedBefore = purchaseInfo.getSkuProductType() == SkuProductType.CONSUMABLE;
if (!wasConsumedBefore) {
acknowledgePurchase(purchaseInfo);
}
}
}
}
}

после (библиотека v4):
private void processPurchases(List
allPurchases, boolean purchasedProductsFetched) {
if (!allPurchases.isEmpty()) {

List signatureValidPurchases = new ArrayList();

//create a list with signature valid purchases
List validPurchases = allPurchases.stream().filter(this::isPurchaseSignatureValid).collect(Collectors.toList());
for (Purchase purchase : validPurchases) {

//query all SKUs as a list
List purchasesSkus = purchase.getSkus();

//loop through all SKUs and progress for each SKU individually
for (int i = 0; i < purchasesSkus.size(); i++) {
String purchasesSku = purchasesSkus.get(i);

Optional skuInfo = fetchedSkuInfoList.stream().filter(it -> it.getSkuId().equals(purchasesSku)).findFirst();
if (skuInfo.isPresent()) {
SkuDetails skuDetails = skuInfo.get().getSkuDetails();

PurchaseInfo purchaseInfo = new PurchaseInfo(generateSkuInfo(skuDetails), purchase);
signatureValidPurchases.add(purchaseInfo);

}
}
}

if (purchasedProductsFetched) {
fetchedPurchasedProducts = true;
billingEventListener.onPurchasedProductsFetched(signatureValidPurchases);
} else {
billingEventListener.onProductsPurchased(signatureValidPurchases);
}

purchasedProductsList.addAll(signatureValidPurchases);

for (PurchaseInfo purchaseInfo : signatureValidPurchases) {
consume(purchaseInfo);

if (shouldAutoAcknowledge) {
boolean wasConsumedBefore = purchaseInfo.getSkuProductType() == SkuProductType.CONSUMABLE;
if (!wasConsumedBefore) {
acknowledgePurchase(purchaseInfo);
}
}
}
}
}

Обратите внимание, как getsku () и getkus () изменил.
Пока все хорошо. Переходя к проблеме ...
В моей библиотеке у меня есть слушатель , вызовный onproductsfetched , который предоставит список с полученными подробностями.billingConnector.setBillingEventListener(new BillingEventListener() {
@Override
public void onProductsFetched(@NonNull List skuDetailsList) {
String sku;
for (SkuInfo skuInfo : skuDetailsList) {
sku = skuInfo.getSkuId();

if (sku.equalsIgnoreCase(getString(R.string.billing_test_purchase))) {
Log.d("IapConnector", "SKU FOUND: " + sku);

Toast.makeText(SettingsActivity.this, "Fetched: " + sku, Toast.LENGTH_SHORT).show();
}
}
}
});

Объяснение задачи:
При использовании кода, представленного выше, в (v3 библиотеке) Все работает как и ожидалось, слушатель запускается, и тост отображается. После перехода на After (библиотека V4) Toast, ломает все. Журнал зарегистрирован в logcat , но тост не показывает. Более того, если я позвоню другому журналу после тоста, он также не будет зарегистрирован, на самом деле ничего не будет вызвано после тоста, даже не завершить () . Но подождите, будет еще не все, если я не называю тост вообще, все работает хорошо. Если я заменяю Toast на защитывание , Snackbar покажет.
Что может вызвать эту проблему? Есть идеи?final Handler handler = new Handler(Looper.getMainLooper());
String finalSku = sku;
handler.postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(SettingsActivity.this, "Fetched: " + finalSku, Toast.LENGTH_SHORT).show();
}
}, 100);

update2:
logcat . Примечание d/iapconnector: SKU найдено: test_purchase7 называется, который является журналом перед Toast
Thread: PlayBillingLibrary-2


Подробнее здесь: https://stackoverflow.com/questions/678 ... everything
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»