Я даже не знаю, какое название должен иметь этот вопрос. Покупка#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
Google в приложении счетов, тост ломает все ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1746604841
Anonymous
Я даже не знаю, какое название должен иметь этот вопрос. Покупка#getskus () .
Это до и после миграции в выставление счетов V4 :
[b] до (v3 библиотека): [/b]
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);
}
}
}
}
}
[b] после (библиотека v4): [/b]
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();
}
}
}
});
[b] Объяснение задачи: [/b]
При использовании кода, представленного выше, в (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);
[b] update2: [/b]
logcat . Примечание d/iapconnector: SKU найдено: test_purchase7 называется, который является журналом перед Toast
Thread: PlayBillingLibrary-2
Подробнее здесь: [url]https://stackoverflow.com/questions/67864418/google-in-app-billing-a-toast-breaks-everything[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия