Cronet ライブラリを使用して、ネットワーク オペレーションを実行する方法を Android アプリ。Cronet は、ライブラリとして利用可能な Chromium ネットワーク スタックです いくつか用意されていますライブラリの機能について詳しくは ネットワーク操作の実行 Cronet。
プロジェクトでライブラリを設定する
プロジェクト内の Cronet ライブラリに依存関係を追加する手順は次のとおりです。
Android Studio に Google の Maven リポジトリへの参照が含まれていることを確認する 次のように、プロジェクトの
settings.gradle
ファイル内に配置します。 例:Cronet 用 Google Play 開発者サービス クライアント ライブラリへの参照を含める これをアプリ モジュールの
build.gradle
ファイルのdependencies
セクションに、次のように記述します。 例を示しています。
これを行うと、CronetEngine
個のオブジェクトが作成されます
依存関係を追加すると、Google Play 開発者サービスから読み込まれた Cronet が使用されます。発信
CronetProviderInstaller.installProvider(Context)
予期しない例外を防ぐために CronetEngine
オブジェクトを作成する前に
デバイスなどのエラーが原因で CronetEngine
の作成時にスローされないようにする
Google Play 開発者サービスの更新版を必要とする。
Google Play 開発者サービスから Cronet を読み込めない場合、
Cronet の API のパフォーマンスが低い実装です。用途
このフォールバック実装は org.chromium.net:cronet-fallback
に依存
new JavaCronetProvider(context).createBuilder()
を呼び出します。
ネットワーク リクエストを作成する
このセクションでは、Cronet を使用してネットワーク リクエストを作成して送信する方法について説明します。 ライブラリ] を選択します。ネットワーク リクエストの送信後、アプリはネットワーク レスポンス。
CronetEngine のインスタンスを作成して設定する
このライブラリには、
CronetEngine.Builder
クラス
これを使用して
CronetEngine
。次の例をご覧ください。
CronetEngine
オブジェクトの作成方法を示します。
val myBuilder = CronetEngine.Builder(context) val cronetEngine: CronetEngine = myBuilder.build()
CronetEngine.Builder myBuilder = new CronetEngine.Builder(context); CronetEngine cronetEngine = myBuilder.build();
Builder
クラスを使用すると、
CronetEngine
オブジェクトで定義できます。たとえば、
キャッシュやデータ圧縮などのオプションが用意されています。詳細については、次をご覧ください:
CronetEngine.Builder
。
リクエスト コールバックの実装を提供する
コールバックの実装を提供するには、
UrlRequest.Callback
、
必要な抽象メソッドを実装します。次の例をご覧ください。
private const val TAG = "MyUrlRequestCallback" class MyUrlRequestCallback : UrlRequest.Callback() { override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { Log.i(TAG, "onRedirectReceived method called.") // You should call the request.followRedirect() method to continue // processing the request. request?.followRedirect() } override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onResponseStarted method called.") // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request?.read(ByteBuffer.allocateDirect(102400)) } override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { Log.i(TAG, "onReadCompleted method called.") // You should keep reading the request until there's no more data. byteBuffer.clear() request?.read(byteBuffer) } override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) { Log.i(TAG, "onSucceeded method called.") } }
class MyUrlRequestCallback extends UrlRequest.Callback { private static final String TAG = "MyUrlRequestCallback"; @Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { Log.i(TAG, "onRedirectReceived method called."); // You should call the request.followRedirect() method to continue // processing the request. request.followRedirect(); } @Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onResponseStarted method called."); // You should call the request.read() method before the request can be // further processed. The following instruction provides a ByteBuffer object // with a capacity of 102400 bytes for the read() method. The same buffer // with data is passed to the onReadCompleted() method. request.read(ByteBuffer.allocateDirect(102400)); } @Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { Log.i(TAG, "onReadCompleted method called."); // You should keep reading the request until there's no more data. byteBuffer.clear(); request.read(byteBuffer); } @Override public void onSucceeded(UrlRequest request, UrlResponseInfo info) { Log.i(TAG, "onSucceeded method called."); } }
Executor オブジェクトを作成してネットワーク タスクを管理する
Executor
クラスを使用すると、ネットワーク
できます。
Executor
のインスタンスを取得するには、次のいずれかを使用します。
返す Executors
クラスの静的メソッド
Executor
オブジェクト。次の例は、Executor
の作成方法を示しています。
newSingleThreadExecutor()
を使用するオブジェクト
メソッド:
val executor: Executor = Executors.newSingleThreadExecutor()
Executor executor = Executors.newSingleThreadExecutor();
UrlRequest オブジェクトを作成して設定する
ネットワーク リクエストを作成するには、
newUrlRequestBuilder()
次を渡す CronetEngine
のメソッド
宛先 URL、コールバック クラスのインスタンス、エグゼキュータ オブジェクトが含まれます。
newUrlRequestBuilder()
メソッドは
UrlRequest.Builder
オブジェクトの
これを使用して UrlRequest
オブジェクトを作成しています。
val requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", MyUrlRequestCallback(), executor ) val request: UrlRequest = requestBuilder.build()
UrlRequest.Builder requestBuilder = cronetEngine.newUrlRequestBuilder( "https://www.example.com", new MyUrlRequestCallback(), executor); UrlRequest request = requestBuilder.build();
Builder
クラスを使用すると、次のことができます。
UrlRequest
のインスタンスを構成します。対象
たとえば優先度や HTTP 動詞を指定できます詳細については、次をご覧ください:
UrlRequest.Builder
。
ネットワーク タスクを開始するには、
リクエストの start()
メソッド:
このセクションの手順に沿って、ネットワークを作成して送信したり、
呼び出します。ただし、わかりやすくするために、この例では
実装
UrlRequest.Callback
はプリントのみ
ログに記録されます。次のセクションでは、コールバックを提供する方法について説明します。
より有用なシナリオ(例: テーブルからのデータの抽出、
リクエストの失敗を検出できます。
ネットワーク レスポンスを処理する
start()
を呼び出すと、
メソッドでは、Cronet リクエストのライフサイクルが開始されます。アプリでは、
ライフサイクル中に呼び出すことができます。詳細については、
Cronet リクエストを参照
説明します。1 対 1 の
サブクラスを作成して、
UrlRequest.Callback
、
実装します。
onRedirectReceived()
レスポンスとしてサーバーが HTTP リダイレクト コードを発行したときに呼び出されます。 コピーされます。新しい宛先へのリダイレクトを追跡するには、
followRedirect()
メソッドを呼び出します。それ以外の場合は、cancel()
を使用します。 メソッドを呼び出します。このメソッドの実装例を次に示します。override fun onRedirectReceived(request: UrlRequest?, info: UrlResponseInfo?, newLocationUrl: String?) { // Determine whether you want to follow the redirect. ... if (shouldFollow) { request?.followRedirect() } else { request?.cancel() } }
@Override public void onRedirectReceived(UrlRequest request, UrlResponseInfo info, String newLocationUrl) { // Determine whether you want to follow the redirect. … if (shouldFollow) { request.followRedirect(); } else { request.cancel(); } }
onResponseStarted()
ヘッダーの最終セットが受信されたときに呼び出されます。
onResponseStarted()
メソッドは、すべてのリダイレクトが従った後にのみ呼び出されます。次のコードでは、 に、メソッドの実装例を示します。override fun onResponseStarted(request: UrlRequest?, info: UrlResponseInfo?) { val httpStatusCode = info?.httpStatusCode if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request?.read(myBuffer) } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request?.read(myBuffer) } responseHeaders = info?.allHeaders }
@Override public void onResponseStarted(UrlRequest request, UrlResponseInfo info) { int httpStatusCode = info.getHttpStatusCode(); if (httpStatusCode == 200) { // The request was fulfilled. Start reading the response. request.read(myBuffer); } else if (httpStatusCode == 503) { // The service is unavailable. You should still check if the request // contains some data. request.read(myBuffer); } responseHeaders = info.getAllHeaders(); }
onReadCompleted()
レスポンス本文の一部が読み取られるたびに呼び出されます。次のコードでは、 次の例は、このメソッドを実装してレスポンスの本文を抽出する方法を示しています。
override fun onReadCompleted(request: UrlRequest?, info: UrlResponseInfo?, byteBuffer: ByteBuffer?) { // The response body is available, process byteBuffer. ... // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer?.clear() request?.read(myBuffer) }
@Override public void onReadCompleted(UrlRequest request, UrlResponseInfo info, ByteBuffer byteBuffer) { // The response body is available, process byteBuffer. … // Continue reading the response body by reusing the same buffer // until the response has been completed. byteBuffer.clear(); request.read(myBuffer); }
onSucceeded()
ネットワーク リクエストが正常に完了したときに呼び出されます。次の の例は、このメソッドの実装方法を示しています。
onFailed()
タイムアウトの後になんらかの理由でリクエストが失敗した場合に呼び出されます。
start()
メソッドが呼び出された。「 以下の例は、このメソッドを実装して、リソースに関する情報を取得する方法を示しています。 次のエラーが表示されます。override fun onFailed(request: UrlRequest?, info: UrlResponseInfo?, error: CronetException?) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error) }
@Override public void onFailed(UrlRequest request, UrlResponseInfo info, CronetException error) { // The request has failed. If possible, handle the error. Log.e(TAG, "The request failed.", error); }
onCanceled()
リクエストが
cancel()
メソッドを使用します。一度呼び出すと、 kubectl の「get」コマンドやUrlRequest.Callback
クラスは 呼び出すことができます。この方法を使用すると、リソースの処理に割り当てたリソースを リクエストできます。このメソッドの実装例を次に示します。