【问题标题】:use AIDL and return response to another app使用 AIDL 并将响应返回到另一个应用程序
【发布时间】:2019-06-08 03:55:24
【问题描述】:

我在一个市场项目中使用 AIDL 进行支付和发送分数 我返回 orderID 以检查结果付款 当开发人员发送请求时,我将她的请求发送到服务器并收到 orderID 返回给开发人员 在有趣的结果支付中,我向我们的服务器发送了一个请求,以使用 orderID 获取结果支付,而响应没有返回我必须返回结果

class DeveloperApiService : Service() {


private val binder = object : ITiroDevApi.Stub() {
    override fun resultPay(token: String?, orderId: String?): String {
        var result = ""
        ServiceHelper.resultPayment(ActiveOwner(), GamerSharedPreferenceHelper(applicationContext).userID
                , orderId, token,
                object : CustomObserver<ServiceHelper.StringResult>() {
                    override fun onError(e: Throwable?) {
                        super.onError(e)
                        result = "tryAgain"
                    }

                    override fun onNext(response: ServiceHelper.StringResult?) {
                        super.onNext(response)
                        if (response!!.result != "") {
                            result = response.result
                        } else {
                            when (response.error) {
                                "error_token_invalid_or_expired" -> result = "error_token_invalid_or_expired"
                                "error_payment_not_verified" -> result = "error_payment_not_verified"
                            }
                        }
                    }
                })

        if (result == "") Thread.sleep(2000)
        return result

    }


    override fun requestPay(token: String?, price: String?): String {
        var result = ""
        ServiceHelper.requestPayment(ActiveOwner(), token, GamerSharedPreferenceHelper(applicationContext).userID
                , price,
                object : CustomObserver<ServiceHelper.StringResult>() {
                    override fun onError(e: Throwable?) {
                        super.onError(e)
                        result = "tryAgain"
                    }

                    override fun onNext(response: ServiceHelper.StringResult?) {
                        super.onNext(response)
                        if (response!!.result != "") {
                            result = response.result
                            inAppPayment(GamerSharedPreferenceHelper(applicationContext).userID, response.result, token!!)
                        }
                        when (response.error) {
                            "error_token_invalid_or_expired" -> result = "error_token_invalid_or_expired"
                            "error_min_amount" -> result = "error_min_amount"
                        }
                    }
                })


        while (result == "") {
            Thread.sleep(1000)
        }
        return result
    }

private fun inAppPayment(userId: String, orderId: String, token: String) {
    var result = ""
    ServiceHelper.inAppPayment(ActiveOwner(), userId, orderId, token,
            object : CustomObserver<ServiceHelper.StringResult>() {
                override fun onError(e: Throwable?) {
                    super.onError(e)
                }

                override fun onNext(response: ServiceHelper.StringResult?) {
                    super.onNext(response)

                    when (response.error) {
                        "error_already_pay" -> result = ""
                        "error_payment_gateway" -> result = "error_payment_gateway"
                    }
                    if (response.result != "") {
                        val browserIntent = Intent("android.intent.action.VIEW", Uri.parse(response.result))
                        applicationContext.startActivity(browserIntent)
                    }
                }
            })

}

你对解决这个问题有什么建议?

【问题讨论】:

  • 在我使用 Thread.sleep 的代码中但这是错误的(这不是真的)

标签: android api payment aidl


【解决方案1】:

你应该让ServiceHelper.paymentResult同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多