2017-06-04 13 views
2

Kotlinでネットワーク操作asyncを実行しようとしています。私はあなたがasync機能を使用して非同期を行うことができるそれを読んでいます。私はエラーの下になっています、誰が問題になるかもしれないと推測できますか?Kotlinで未解決の参照非同期

未解決参照:非同期

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 

    async() { 
     val forecastWeather = ForecastRequest("302015").execute() 
     Log.d("Test", forecastWeather.toString()) 
    } 
} 

ForecastRequest.kt

class ForecastRequest(val zipcode: String) { 
    companion object { 
     private val APP_ID = "XYZ" 
     private val URL = "http://api.openweathermap.org/data/2.5/" + 
        "forecast/daily?mode=json&units=metric&cnt=7" 
     private val COMPLETE_URL = "$URL&APPID=$APP_ID&q=" 
    } 

    fun execute(): ForecastResponse { 
     val forecastJsonStr = java.net.URL(COMPLETE_URL + zipcode).readText() 
     return Gson().fromJson(forecastJsonStr, ForecastResponse::class.java) 
    } 
} 

トップレベルbuild.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript { 
    ext.kotlin_version = '1.1.2-4' 
    repositories { 
     maven { url 'https://maven.google.com' } 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:3.0.0-alpha2' 
     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 { 
     maven { url 'https://maven.google.com' } 
     jcenter() 
     mavenCentral() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

モジュールレベルbuild.gradle

apply plugin: 'com.android.application' 

apply plugin: 'kotlin-android' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.williams.thirddemo" 
     minSdkVersion 23 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.google.code.gson:gson:2.8.1' 
} 
+0

への依存性があることを確認します。このAPIにもAPIの秘密が必要な場合を除いて、今すぐ無効にして新しいAPIを取得する必要があります。 –

+0

@ChristianBrüggemannAh:削除されました:) –

+0

@Williamsまだ歴史的に質問の変更ログにありますので、あなたのAPP_IDの不正使用を望まない場合は変更してください –

答えて

1

私はasync機能がankoライブラリではありませんKotlinライブラリ自体で利用可能です参照してください。 https://github.com/Kotlin/anko

この依存関係をbuild.gradle compile "org.jetbrains.anko:anko-commons:0.10.1"に追加して解決しましたが、これはKotlin自体では利用できません。

asyncは廃止されていますが、代わりにdoAsyncを使用することをお勧めします。

doAsync { 
    val forecastWeather = ForecastRequest("302015").execute() 
    uiThread { 
     Log.d("Test", forecastWeather.toString()) 
    } 
} 
2

異なるKotlinライブラリは、異なることを行う異なる実装asyncを持つことができます。あなたはコアライブラリからgeneral async-await functionを望んでいた場合

、あなたはあなたが誤って(?)ここではあなたのAPP_IDを掲載しましたkotlinx.coroutines

関連する問題