Я пытаюсь реализовать ниже Java-код в C # со ссылкой на Android Документация
List<String> skuList = new ArrayList<> ();
skuList.add("premium_upgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
// Process the result.
}
});
У меня здесь 2 вопроса. Я подумал, что я буду запускать этот код в отдельном потоке, а не в потоке пользовательского интерфейса, как показано ниже, чтобы мой пользовательский интерфейс реагировал на сетевое соединение. это правильный подход? QuerySkuDetailsAsync называется async, но не реализуется как async. как это должно работать и как обрабатывать в c #, потому что он будет запускать и забывать, но слушатель обрабатывает ответ.
public async Task<List<InAppBillingProduct>> GetProductsAsync(List<string> ProductIds)
{
var getSkuDetailsTask = Task.Factory.StartNew(() =>
{
var prms = SkuDetailsParams.NewBuilder();
var type = BillingClient.SkuType.Inapp;
prms.SetSkusList(ProductIds).SetType(type);
BillingClient.QuerySkuDetailsAsync(prms.Build(), new SkuDetailsResponseListener());
return InAppBillingProducts;
});
return await getSkuDetailsTask;
}
2-й вопрос о том, как обращаться со слушателем, как показано ниже. Как мне вернуть значение из слушателя. Мне нужен список возврата объекта InAppBillingProduct.
public class SkuDetailsResponseListener : Java.Lang.Object, ISkuDetailsResponseListener
{
public void OnSkuDetailsResponse(BillingResult billingResult, IList<SkuDetails> skus)
{
if (billingResult.ResponseCode == BillingResponseCode.Ok)
{
// get list of Products here and return
}
}
}