Her*_*arz 2 android return-value listener kotlin
我尝试这些教程:https://github.com/docusign/mobile-android-sdk/blob/master/README.md,尤其是 function getUserSignatureInfo。userSignaturesGetUserSignature在此函数中进行REST API 调用 ( )。
userSignatureId在下面的代码中,我尝试返回从 REST API 获得的值 ( )。我明白,这种方式是不可能的,因为onSuccess()稍后将在外部函数 getUserSignatureInfo() 返回时调用。
getUserSignatureInfo()我想从 a调用Fragments onActivityCreated()并在创建 RecyclerView.Adapter 时使用该值。
问题是,执行此类操作的(最佳实践)方法是什么:进行 REST API 调用,等待响应,并在进一步的代码中使用响应。
// my Fragment
...
...
val userSignatureId = getUserSignatureInfo()
recyclerView.adapter = createMyAdapter(userSignatureId)
...
...
// function where the REST API call is made
fun getUserSignatureInfo(context: Context) : String {
val eSignApiDelegate = DocuSign.getInstance().getESignApiDelegate()
val usersApi = eSignApiDelegate.createApiService(UsersApi::class.java)
val authDelegate = DocuSign.getInstance().getAuthenticationDelegate()
val user = authDelegate.getLoggedInUser(context)
var userSignatureId = ""
eSignApiDelegate.invoke(object : DSESignApiListener {
override fun <T> onSuccess(response: T?) {
if (response is UserSignaturesInformation) {
val userSignature = (response as UserSignaturesInformation).getUserSignatures().get(0)
Log.d(TAG, "Signature Id: " + userSignature.signatureId);
// My problem: this assignment is useless
// because the outer function getUserSignatureInfo()
// returns earlier as onSuccess()
userSignatureId = userSignature.signatureId
}
}
override fun onError(exception: DSRestException) {
// TODO: Handle error
}
}) {
usersApi!!.userSignaturesGetUserSignature(user.accountId, user.userId, "signature")
}
// This is my problem: userSignatureId is empty because
// onSuccess() fires later as this function returns
return userSignatureId
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!
小智 5
例如,您可以将回调传递给 getUserSignatureInfo()
fun getUserSignatureInfo(context: Context, callback: (String)->Unit) : String {
val eSignApiDelegate = DocuSign.getInstance().getESignApiDelegate()
val usersApi = eSignApiDelegate.createApiService(UsersApi::class.java)
val authDelegate = DocuSign.getInstance().getAuthenticationDelegate()
val user = authDelegate.getLoggedInUser(context)
eSignApiDelegate.invoke(object : DSESignApiListener {
override fun <T> onSuccess(response: T?) {
if (response is UserSignaturesInformation) {
val userSignature = (response as UserSignaturesInformation).getUserSignatures().get(0)
Log.d(TAG, "Signature Id: " + userSignature.signatureId);
// return the value in the callback
callback(userSignature.signatureId)
}
}
Run Code Online (Sandbox Code Playgroud)
当您想使用另一个类的字符串值时,
getUserSignatureInfo(context) { id ->
Log.d("test", id)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2656 次 |
| 最近记录: |