Android 使用AIDL并将响应返回到另一个应用程序

Android 使用AIDL并将响应返回到另一个应用程序,android,api,payment,aidl,Android,Api,Payment,Aidl,我在一个市场项目中使用AIDL进行支付并发送分数 我返回orderID以检查结果付款 当开发人员发送请求时,我将她的请求发送到服务器,并将orderID返回给开发人员 在fun resultPay中,我向服务器发送了一个请求,请求使用orderID获得结果付款,而响应尚未返回,我必须返回结果 class DeveloperApiService : Service() { private val binder = object : ITiroDevApi.Stub() { overri

我在一个市场项目中使用AIDL进行支付并发送分数 我返回orderID以检查结果付款 当开发人员发送请求时,我将她的请求发送到服务器,并将orderID返回给开发人员 在fun resultPay中,我向服务器发送了一个请求,请求使用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)
                    }
                }
            })

}
类服务:服务(){
private val binder=object:ITiroDevApi.Stub(){
覆盖有趣的结果页(标记:String?,订单ID:String?):String{
var result=“”
ServiceHelper.resultPayment(ActiveOwner(),GamerSharedPreferenceHelper(applicationContext).userID
,orderId,token,
对象:CustomObserver(){
覆盖有趣的错误(e:可丢弃?){
super.onError(e)
result=“tryAgain”
}
覆盖下一步(响应:ServiceHelper.StringResult?){
super.onNext(回复)
如果(响应!!.result!=“”){
result=response.result
}否则{
何时(response.error){
“error\u token\u invalid\u或\u expired”->result=“error\u token\u invalid\u或\u expired”
“错误\付款\未验证”->result=“错误\付款\未验证”
}
}
}
})
if(result==“”)Thread.sleep(2000)
返回结果
}
覆盖fun requestPay(令牌:String?,价格:String?):String{
var result=“”
ServiceHelper.requestPayment(ActiveOwner(),令牌,GamerSharedPreferenceHelper(applicationContext).userID
,价格,
对象:CustomObserver(){
覆盖有趣的错误(e:可丢弃?){
super.onError(e)
result=“tryAgain”
}
覆盖下一步(响应:ServiceHelper.StringResult?){
super.onNext(回复)
如果(响应!!.result!=“”){
result=response.result
inAppPayment(GamerSharedPreferenceHelper(applicationContext).userID,response.result,token!!)
}
何时(response.error){
“error\u token\u invalid\u或\u expired”->result=“error\u token\u invalid\u或\u expired”
“错误最小金额”->result=“错误最小金额”
}
}
})
而(结果==“”){
线程。睡眠(1000)
}
返回结果
}
应用支付中的私人乐趣(userId:String、orderId:String、token:String){
var result=“”
inAppPayment(ActiveOwner(),用户ID,订单ID,令牌,
对象:CustomObserver(){
覆盖有趣的错误(e:可丢弃?){
super.onError(e)
}
覆盖下一步(响应:ServiceHelper.StringResult?){
super.onNext(回复)
何时(response.error){
“错误\u已支付”->result=“”
“错误\支付\网关”->result=“错误\支付\网关”
}
如果(response.result!=“”){
val browserIntent=Intent(“android.Intent.action.VIEW”、Uri.parse(response.result))
applicationContext.startActivity(浏览器内容)
}
}
})
}

解决此问题的建议是什么?

您应该使
serviceheloper.paymentResult
同步。

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