Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save senseilearning/0a64dccbc7f0277a3c8ea8b5f5498934 to your computer and use it in GitHub Desktop.
Save senseilearning/0a64dccbc7f0277a3c8ea8b5f5498934 to your computer and use it in GitHub Desktop.
Ktorで HttpTimeout が not defined (未定義) というエラーでクラッシュする場合、Ktorのタイムアウトプラグインが正しく設定されていない可能性が非常に高いです。
見直すべき点は、主に次の3つです。
* Gradleの依存関係 (build.gradle.kts)
* Ktorクライアントの初期化コード
* Ktorのバージョン
## 1. Gradleの依存関係を確認する 🐘
HttpTimeout プラグインは ktor-client-core ライブラリに含まれています。まず、この依存関係が app/build.gradle.kts (または build.gradle) に正しく追加されているか確認してください。
また、HTTP/3を利用しているとのことなので、クライアントエンジン(通常は CIO)の依存関係も必要です。
app/build.gradle.kts を確認・追記してください:
dependencies {
// Ktor Client Core (HttpTimeoutプラグインを含む)
implementation("io.ktor:ktor-client-core:2.3.12") // 最新バージョンを確認してください
// 使用するHTTPクライアントエンジン (例: CIO)
implementation("io.ktor:ktor-client-cio:2.3.12")
// JSONを扱う場合はContentNegotiationも必要
// implementation("io.ktor:ktor-client-content-negotiation:2.3.12")
// implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.12")
}
【重要】
build.gradle.kts を編集した後は、必ずAndroid Studioの上部に表示される "Sync Now" をクリックして、変更をプロジェクトに反映させてください。
## 2. Ktorクライアントのコードを確認する 🚀
次に、HttpClient を作成しているKotlinコードを確認します。HttpTimeout を利用するには、install ブロックで明示的に設定する必要があります。
正しい設定例:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.* // ◀️ HttpTimeoutのために必要
val client = HttpClient(CIO) {
// ✅ HttpTimeoutプラグインをインストール
install(HttpTimeout) {
// リクエスト全体に対するタイムアウト (ミリ秒)
requestTimeoutMillis = 15000
// 接続が確立するまでのタイムアウト
connectTimeoutMillis = 15000
// ソケット通信のタイムアウト (データの読み書きがなかった場合)
socketTimeoutMillis = 15000
}
// (オプション) HTTP/3を有効にする場合
engine {
http2 = true // CIOエンジンではHTTP/2フラグを有効にする
}
}
チェックポイント ✔️
* import io.ktor.client.plugins.* が抜けていませんか?
* HttpClient の設定ブロック内で install(HttpTimeout) { ... } を正しく呼び出していますか?
* requestTimeoutMillis などのプロパティ名を間違えていませんか? (例: requestTimeout ではなく requestTimeoutMillis)
## 3. Ktorのバージョンを統一する
複数のKtorライブラリ(core, cio, content-negotiation など)を使っている場合、すべてのバージョンを完全に一致させる必要があります。バージョンが異なると、予期せぬエラーやクラッシュの原因になります。
Gradleファイルで変数を使い、バージョンを統一することをおすすめします。
app/build.gradle.kts でのバージョン統一例:
val ktorVersion = "2.3.12" // 変数でバージョンを定義
dependencies {
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion")
// ... 他のKtorライブラリも同じ変数を使う
}
## まとめ
まずは、build.gradle.kts に ktor-client-core が正しく記述されているかを確認し、次にクライアントの初期化コードで install(HttpTimeout) が正しく呼ばれているかを確認してください。ほとんどの場合、このどちらかが原因です。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment