kotlin - 获取价格应用内计费库
问题描述
我的 apk 在 alpha 通道中上传,我的产品已创建,购买按钮(如果有效)。
我正在尝试在 RecyclerView 中展示要购买的几种产品。购买对我有用。 我不能做的是显示产品的价格和标题。
在我的myadapter.kt
文件中,我有以下 varvar p = ArrayList<String>()
和函数:
fun queryskudetails() {
billingClient = BillingClient.newBuilder(context).setListener(this).build()
billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingServiceDisconnected() {
Log.i("Disconnected", "billing client")
}
override fun onBillingSetupFinished(responseCode: Int) {
billingClient.let { billingClient ->
val skulist = ArrayList<String>()
skulist.add("books")
skulist.add("pens")
skulist.add("keychains")
val params = SkuDetailsParams.newBuilder()
params.setSkusList(skulist).setType(BillingClient.SkuType.INAPP)
billingClient.querySkuDetailsAsync(params.build(), { responseCode, skuDetailsList ->
if (responseCode == BillingClient.BillingResponse.OK && skuDetailsList != null) {
for (skuDetails in skuDetailsList) {
val sku = skuDetails.sku
val price = skuDetails.price
Log.i("skudetails", sku)
Log.i("skuprice", price)
hashMap[sku] = price
println("===== price and sku ======")
println(price)
println(sku)
println("===== /proce and sku ======")
// add price to array p1 (defined as a global variable)
p1.add(price)
}
p = precios
}
})
}
}
})
}
在onBindViewHolder
我将价格和标题分配给 textView 的部分中:
override fun onBindViewHolder(holder: Vholder, position: Int) {
queryskudetails()
print("-----Here array price print [] -----")
println (p)
var text: String = array[position]
Log.i("text", text)
holder.textView.text = text
holder.Price.text = hashMap[text.toLowerCase()].toString() // this does not work for me, retun null
Log.i("price", hashMap["books"].toString())
println(hashMap[array[position]]) // retunr null
holder.btn.setOnClickListener(View.OnClickListener {
Log.i("button", text.toLowerCase())
var skuid = hashMap2[text]
val flowParams = BillingFlowParams.newBuilder()
.setSku(text.toLowerCase())
.setType(BillingClient.SkuType.INAPP)
.build()
val responseCode = billingClient.launchBillingFlow(context as Activity?, flowParams)
})
}
当我在 textview 中显示价格时,以下代码对我不起作用:
holder.Price.text = hashMap[text.toLowerCase()].toString()
where Price
isvar Price: TextView = itemView.findViewById(R.id.price)
作为第二种选择,我尝试使用p1
在函数中存储所有价格的矩阵,queryskudetails ()
但它返回空。
如何使用数组的内容p1
?
解决方案
价格存储在 Map:hashMap
中,使用 sku(谷歌游戏控制台中的标识符)恢复它
hashMap = {sku1=USD 3.99, sku2=USD 1.99, sku3=USD 3.99}
//to recover the values according to the sku (key)
hashMap[sku1] = USD 3.99
hashMap[sku2] = USD 1.99
正如我在您的代码中看到的holder.Price.text = hashMap[text.toLowerCase()].toString()
(在变量中,Text
您必须具有标识符 (identifier = sku) 才能恢复每个产品的价格),这是正确的,请检查另一部分是否存在冲突或重复。
推荐阅读
- python - 熊猫和字典:如何获取每个键的所有唯一值?
- windows-subsystem-for-linux - 如何在 WSL2 中重置 Alpine 发行版?
- docker - 使用 nohup 在远程服务器的 docker 中运行一个长进程
- javascript - BoostrapTable - 根据数据库中的数据选择行
- azure - ODBC DataSource - 如何将数据保存在 Azure 云上以获取 PowerBI?
- google-apps-script - 具有域范围安装的 Gmail 插件不需要由谷歌审查
- python - 一个函数可以返回多少个值?
- c - 如何分析二进制可执行文件中编译函数(及其依赖项)的大小?
- javascript - Django 音乐播放器:按下播放按钮时,models.FileField 未正确将音频文件传递给 HTML
- android - 无法将 Android Studio 的调试器附加到 Android 进程并且无法从 Profiler 进行调试