Android Studio:应用内结算 v4 - 如何正确迭代 skuDetails?

Android Studio: In-App-Billing v4 - How do you correctly iterate over skuDetails?

我的应用是测试应用....

当我调用我的函数来获取商店商品信息时,我实际上得到了一个 skuDetails return 的...

[SkuDetails: {"productId":"extra_lives","type":"inapp","price":"[=11=].99","price_amount_micros":990000,"price_currency_code":"USD","title":"extra lives (Android2dGame)","description":"Gives the gamer more lives in game.","skuDetailsToken":"AEuhp4IOHOfD5PIy8nRrLS2ywV8uP2xsU5e4aii8XmXoQbgp3cvJIheqJBFdmwAg9wAg"}, SkuDetails: {"productId":"tokens","type":"inapp","price":"[=11=].99","price_amount_micros":990000,"price_currency_code":"USD","title":"tokens (Android2dGame)","description":"Tokens are an in-game currency.","skuDetailsToken":"AEuhp4KHjvTaAB9I1zi3CCIOWBNwQN9QNtbd8leQbbhNj0vImVWSao6_SEABv6dURf9V"}]

那时我将它作为字符串打印到 logcat 但是当我尝试像这样迭代 skuDetails 时...

                        Log.d("prodid0", "         ");
                        for (SkuDetails sku : skuDetailsList){
                            shopItemsSku.add(sku);
                            ArrayList<String> curVals = new ArrayList<String>();
                            curVals.add(sku.getTitle());
                            curVals.add(sku.getSku());
                            curVals.add(sku.getPrice());
                            curVals.add(sku.getDescription());
                            curVals.add(sku.getType());
                            shopItemDict.put(sku.getTitle(), curVals);

                            Log.d("prodid1", sku.getTitle());
                            Log.d("prodid2", sku.getSku());
                            Log.d("prodid3", sku.getPrice());
                            Log.d("prodid4", sku.getDescription());
                            Log.d("prodid5", sku.getType());
                            Log.d("prodid6", "         ");
                        }
                        skuDetails = shopItemsSku.get(0);

除“prodid0”的日志 ID 外,logcat 不会打印任何内容。就像 for 循环永远不会运行,但为什么?

我想这就是我的应用在开始购买流程时崩溃的原因,因为我的 skuDetails 变量没有填充实际的 skudetail。

这是一个示例,说明如果这些功能不起作用,您可以采取的措施。由于 SKU 响应在 JSON 中给出,请尝试

    try {
        JSONArray skuArray = new JSONArray(skuDetails.originalJson);
        for (int i = 0; i < skuArray.length(); i++) {
            String item = choices.getString(i);
            Log.d("SKU ITEM: " + item);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

这应该会打印出 JSON 数组中的所有项目。您可能必须将它们作为 JSON 对象获取或使用 get("price") 等。如果这不起作用,请尝试 new JSONObject(skuDetails.originalJson).get("price ")

我还没有对此进行测试,但我有一个理论....如果我创建自己的 Java 方法将返回的 SkuDetails 转换为字符串,然后将其解析为键值对每个 sku...然后使用该信息创建一个 Json 字符串(每个 sku),然后使用 Gson 创建一个 skuDetails 对象以传递给购买流程...它会起作用吗?

    Example....

    GsonBuilder gsonBuilder = new GsonBuilder();
    Gson gson = gsonBuilder.create();
    SkuDetails mItem = gson.fromJson("{\"SkuDetails\":{\"title\":\"extralives\",\"type\":inapp}}", SkuDetails.class);
    // of course you would have a full sku for one item

我希望我可以将 'mItem' 传递给购买流程功能并获得结果。

好的...找到问题了。

shopItemsSku.add(sku);

出于某种原因,这打破了循环。它被定义为 List SkuDetails shopItemsSku。

我改成...

ArrayList<SkuDetails> shopItemsSku = new ArrayList<SkuDetails>();

现在,有两件事之一导致了这个问题……(A) 可能是 ArrayList 应该增长而 List 通常是固定的……或者 (B) 我从未调用过 new List<> () 第一次。

我很惊讶没有引发异常,因为在 Python 中,如果出现问题,它会通知您。

我已经习惯了 Java 但我知道我会犯像这次这样的小愚蠢错误,因为我使用它的时间不长,但由于 17 年的使用,我可以完全使用它编程。

Google API 将成为“山毛榉”,这是不可避免的,我知道它需要时间才能坚持下去。

但是,我可以说...Python 作为一种编程语言更强大,语法更简洁。所有那些缓慢的语言谈话都是胡说八道,因为微处理器现在非常快。 Python 只需要时间来启动事情...就像启动汽车一样,但当它开始工作时,结果是立竿见影的...一点都不慢。数据结构非常发达,您可以在 python 中随意编写任何逻辑代码,而无需考虑代码工作。

作为一名 Java 程序员,我清楚地看到,那些日子已经结束了。我只希望我仍然可以像使用 Python.

一样使用 Java 管理相同级别的完美代码,逻辑明智