未解决的参考:启动。我不能用Kotlin协程写例子

时间:2019-10-02 14:03:32

标签: android android-studio kotlin kotlin-coroutines

这篇文章是俄语的,但是我编辑了它。我得到了答案。谢谢 抱歉,我的英语不好:D

我要学习kotlin协程,但是我在android studio上遇到了问题。

我确实需要在gradle中导入库,但是我遇到了代码编译器的问题。
我想编写下一个代码,但是编译器告诉我,不是。

我只是不能使用启动。 Kotlin版本是1.3.50。错误:未解决的参考启动

导入

import kotlinx.coroutines.delay
import kotlinx.coroutines.*

我尝试使用的鳕鱼。

suspend fun firstCoroutine(){
        println("Kotlin Start")
        launch(CommonPool){
            delay(2000)
            println("Kotlin Inside")

        }
        println("Kotlin End")
    }

我的build.gradle应用文件

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'
//эти файлы используюстя для компиляции, построения и упаковки приложений и библиотек
//настройки для модуля
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "guard_studio.akira.firstcotlinproject"//идентификатор приложения
        minSdkVersion 17//минимальная поддерживаемая версия сдк
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"//версия приложения для гугл плэй
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

//список библиотек подключенных к проекту
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2"
}

build.gradle级项目

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "http://dl.bintray.com/kotlin/kotlin-eap"
        }
    }

}

2 个答案:

答案 0 :(得分:0)

您似乎正在遵循一个过时的教程。如果要使用协程的最新版本,则必须使用CoroutineScope。刚开始,您可以使用GlobalScope

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

suspend fun firstCoroutine() {
    println("Kotlin Start")
    GlobalScope.launch {
        delay(2000)
        println("Kotlin Inside")

    }
    println("Kotlin End")
}

答案 1 :(得分:0)

尽管这是错误的自然语言(俄语)-请将您的帖子翻译成英文,以便其他人可以理解您-我会这样定义您的问题:

“无法在我的暂停函数中启动协程”

该问题的答案:

  

新协程只能在合并范围内启动。

暂停功能不提供此范围。它们的功能:可以在协程中称为 in Please read this introduction into coroutines for more info.

最简单的解决方案:

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

fun firstCoroutine(){
    println("Kotlin Start")

    GlobalScope.launch(){
        delay(2000)
        println("Kotlin Inside")

    }
    println("Kotlin End")
}

您还可以定义runBlocking:

import kotlinx.coroutines.runBlocking

fun firstCoroutine() = runBlocking {
    println("Kotlin Start")

    launch(){
        delay(2000)
        println("Kotlin Inside")

    }
    println("Kotlin End")
}