Kotlin を使用して Android で http リクエストを作成しようとしていますが、その方法は 2 つあります。
1 つは従来の方法で、次のコード (クラスの残りの部分は不要と思われるため、AsyncTask
のみ) を使用して (あまりきれいではありません) を使用します。doInBackground
override fun doInBackground(vararg params: Void?): String? {
val url = URL("myUrl")
val httpClient = url.openConnection() as HttpURLConnection
if(httpClient.getResponseCode() == HttpURLConnection.HTTP_OK){
try {
val stream = BufferedInputStream(httpClient.getInputStream())
val data: String = readStream(inputStream = stream)
return data;
} catch (e : Exception) {
e.printStackTrace()
} finally {
httpClient.disconnect()
}
}else{
println("ERROR ${httpClient.getResponseCode()}")
}
return null
}
さて、私は Anko という名前のライブラリーに出会いました。これはここの多くの人が知っているもので、その DSL を非同期タスクに使用しようとしました。問題は、ここでは非同期タスク用の Anko に関する多くの情報を見つけられなかったので、新しいトピックを開いて、誰かが私が間違っていること、または私がすべきだと考えていることを教えてくれるかどうかを確認することだと思いましたそれを機能させるために行います。
使用したかったコードは次のとおりです。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
async() {
val result = URL("myUrl").readText()
textView1.setText(result)
}
}
潜在的な間違いを最小限に抑えるために、できるだけスリムに保とうとしましたが、非同期ブロック内のコードは何もしていないため、ここで何か間違ったことをしているに違いありませんが、アプリはクラッシュしておらず、例外も発生していません. Intellij IDEA を使用してデバッグしようとしましたが、非同期ブロック内の最初の行の後、「アプリケーションは実行中です」と言ってデバッグを停止します。接続に失敗したため、最初の行のどこかでハングアップしたと推測されますが、わかりません。
URL("myUrl").openConnection()
また、非同期ブロック内で正規を使用しようとしましたが、それも機能しませんでした。
とにかく、どんな助けでも大歓迎です。