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 管理相同级别的完美代码,逻辑明智
我的应用是测试应用....
当我调用我的函数来获取商店商品信息时,我实际上得到了一个 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 管理相同级别的完美代码,逻辑明智