如何异步调用HTTP Post API?

10 浏览
0 Comments

如何异步调用HTTP Post API?

我在我的Android应用中遇到了问题。我对它还不太熟悉,对于异步操作的正确文档有些困惑。我正在使用kohttp库来帮助我。问题是,不能在主UI线程上运行它,所以我想将这个请求设置为异步。我在文档中找不到明确的参考,而且我真的不知道如何在纯Kotlin中实现这一点。\n下面是我想到的解决方法,我创建了一个名为LoginCall的独立类。我尝试了其他方法,但没有成功。我该如何在新线程上运行它并仍然使用响应?\nclass LoginCall {\n fun callLoginRequest(a:String, b:String): Any {\n val response: Response = httpPost {\n host = \"XXX\"\n path = \"XXX\"\n param { }\n header { }\n body {\n form {\n \"email\" to a\n \"password\" to b\n }\n }\n }\n return response\n }\n}\n

0
0 Comments

如何异步调用HTTP Post API?

自从kohttp 0.10.0版本以后,你可以使用异步方法来解决这个问题。你可以尝试使用它们。

代码示例:

suspend fun callLoginRequest(a:String, b:String): Any {

val response: Deferred<Response> = httpPostAsync {

host = "XXX"

path = "XXX"

param { }

header { }

body {

form {

"email" to a

"password" to b

}

}

}

// for further usage in coroutines

return response.await()

}

然后从协程中调用这个函数。

0
0 Comments

问题的原因是:用户想要实现异步调用HTTP Post API,但目前的代码库中没有提供相应的方法。

解决方法是:用户可以在GitHub上创建一个问题(issue),请求实现asyncHttpPost方法。

0
0 Comments

如何异步调用HTTP Post API?

在Android平台上,有很多方法可以实现这个目标。如果你使用的是Android作为底层平台,你可以使用原生组件AsyncTask。关于如何正确使用它,可以参考一个很好的Stack Overflow帖子:链接

如果你希望利用Kotlin作为编程语言以及提供的特性,你可以尝试使用coroutines参考链接

个人而言,我推荐使用coroutines,它简化了异常和错误处理,并且避免了回调地狱。下面是使用coroutine的示例代码:

// 全局变量

private val mainScope = CoroutineScope(Dispatchers.MAIN + SupervisorJob())

// 在一个方法中

mainScope.launch{

withContext(Dispatchers.IO){

// 在这里执行你的异步任务,你可以看到,你是在一个IO线程的范围内执行的。

}

}

0