我正在做一个http请求,但如果我得到答案,我需要返回一个值。 我的问题是,我的代码继续,我的http请求还没有完成。 但我总是得到错误,因为函数返回前请求结束我正在使用燃料库 感谢这样的事情: fun get_data():Boolean{ val URL:String=”http:myurl” var response:Boolean=false URL.httpGet( listOf(“user” to “user”)).responseJson{request, response, result -> result.fold( success = { json -> response=true }, failure = { error -> response=false } ) } return response }
我正在尝试从JSon API在Kotlin中创建一个列表。 我做了Udemy的教程,我做了天气应用程序。 它完美的工作,但现在我需要一个订单列表新的列表。 这里是天气API代码: { “query”: { “results”: { “channel”: { “item” : { “forecast” : [ { “data”: 1 }, { “data”: 1 }, { “data”: 1 } ] } } } } } 但是现在我需要列出一个列表,并采用前面的例子,它看起来像这样: { “query”: { “results”: { “channel”: { “item”: { “forecast”: { “0”: { “data”: 1 }, “1”: { […]
我有简单的课程 data class UserInfo(val id:String, val name:String, val email:String) : Serializable { } 我将它序列化为字符串 (userInfo as Serializable).toString() 我怎样才能反序列化它?
突然发现,递归调用挂起函数需要更多的时间,然后调用相同的函数,但没有suspend修饰符,所以请考虑下面的代码片段(基本的斐波那契数列计算): suspend fun asyncFibonacci(n: Int): Long = when { n asyncFibonacci(n + 2) – asyncFibonacci(n + 1) n == -1 -> 1 n == 0 -> 0 n == 1 -> 1 n >= 2 -> asyncFibonacci(n – 1) + asyncFibonacci(n – 2) else -> throw IllegalArgumentException() } 如果我调用这个函数并用下面的代码来衡量它的执行时间: fun main(args: Array) { val totalElapsedTime […]
尝试使用Robolectric测试正在使用EasyMvp的活动时遇到问题。 所有的课程都是用Kotlin写的。 这是一个活动的开始: @ActivityView(layout = R.layout.activity_access, presenter = AccessPresenterImpl::class) class AccessActivity : BaseActivity(), AccessView { @Presenter lateinit var presenter: AccessPresenter override fun providePresenter(): BasePresenter? { return presenter } 在onStart上,每个活动都在演示者中初始化临时演员。 我试图在我的应用程序中介绍Robolectric测试。 var activity: AccessActivity? = null var loginEditText: EditText? = null var passwordEditText: EditText? = null @Before fun initData() { activity = Robolectric.setupActivity(AccessActivity::class.java) loginEditText = activity?.findViewById(R.id.loginEditText) […]
我今天开始在Android上使用Kotlin协同程序,并且注意到Anko对它们有一套自己的辅助方法。 我明白为什么asReference()存在,但我不明白为什么bg() asReference() ,因为核心协程库lib已经具有async() 。 bg()代码非常简单,它内部使用async() : @PublishedApi internal var POOL = newFixedThreadPoolContext(2 * Runtime.getRuntime().availableProcessors(), “bg”) inline fun bg(crossinline block: () -> T): Deferred = async(POOL) { block() } 那么使用bg()而不是async()的优点是什么? 对于Android应用程序, async()效率低下吗?
我在HomeActivity中使用LiveData有以下一些代码。 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Show the launch splash screen. // this.setContentView(R.layout.activity_home) this.viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java) this.viewModel.getUser().observe(this, Observer { user: User? -> }); } 虽然这似乎工作,以下部分是什么意思? Observer { user: User? -> } 这必须产生一个符合Observer接口的对象 void onChanged (T t) https://developer.android.com/reference/android/arch/lifecycle/Observer.html 如何 Observer { user: User? -> } 导致与onChanged方法的对象? 我不知道是什么把一个接口的名称放在lambdaexpression式的前面。 谢谢!
我正在阅读Kotlin Coroutine,知道它是基于suspendfunction的。 但suspend是什么意思? 协程或函数被暂停? 从https://kotlinlang.org/docs/reference/coroutines.html 基本上,协程是可以暂停而不阻塞线程的计算 我听到有人经常说“暂停function”。 但是我认为是因为等待函数完成而被暂停的协程? “挂起”通常意味着“停止运行”,在这种情况下,协程是空闲的。 🤔我们应该说协程暂停了吗? 哪个协程暂停? 从https://kotlinlang.org/docs/reference/coroutines.html 为了继续这个比喻,await()可以是一个挂起函数(因此也可以从async {}块中调用)暂停一个协程,直到某个计算完成并返回结果: async { // Here I call it the outer async coroutine … // Here I call computation the inner coroutine val result = computation.await() … } 🤔它说“暂停一个协程,直到一些计算完成”,但协程就像一个轻量级的线程。 所以如果协程暂停,那么计算如何完成呢? 我们看到await被调用computation ,所以它可能是async ,返回Deferred ,这意味着它可以启动另一个协程 fun computation(): Deferred { return async { true } […]
我正在进行训练,培训师正在使用Java,而我正在使用Kotlin。 到目前为止,我们在任何地方都有同样的结果,但是在这里我无法得到它的工作。 有两个实体类: @Entity data class Student( @Id @GeneratedValue var id: Long = 0, @Column(nullable = false) var name: String = “”, @OneToOne() var passport: Passport? = null ) @Entity data class Passport( @Id @GeneratedValue var id: Long = 0, @Column(nullable = false) var number: String = “” ) 而在测试类中,我使用实体管理器来执行查询。 @RunWith(SpringRunner::class) @SpringBootTest class StudentRepositoryTest { […]
我现在正在学习kotlin,但是当我尝试使用它来进行网络请求时,AndroidStudio在我的代码中抛出了一个exception。 public class CustomRequest(val city_code:String){ fun execute():ForecastResult{ val url = URL(SERVER+PARAM) val forecastResStr = url.readText() Log.e(“MyApplication”,forecastResStr) return JSON.parseObject(forecastResStr,ForecastResult::class.java) } } 现在我不能编译我的应用程序,请help.Thanks。 这里是个例外: Error:(18, 59) org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Couldn’t inline method call ‘readText’ into fun execute():DataResult{ val resultStr = URL (COMPLETE_URL+city_code).readText() return JSON.parseObject(resultStr,SomeClass::class.java) } cause: Not generated Cause: List has more than one element. […]