간단한 요청 보내기

Cronet 라이브러리를 사용하여 Android 앱 Cronet은 라이브러리로 사용할 수 있는 Chromium 네트워크 스택입니다. 여러 가지 옵션이 있습니다. 라이브러리 기능에 대한 자세한 내용은 참조: 다음을 사용하여 네트워크 작업 수행 Cronet

프로젝트에서 라이브러리 설정

프로젝트의 Cronet 라이브러리에 종속성을 추가하려면 다음 단계를 따르세요.

  1. Android 스튜디오에 Google의 Maven 저장소 참조가 포함되었는지 확인 (프로젝트의 settings.gradle 파일에서) 예:

    Groovy

    dependencyResolutionManagement {
       ...
       repositories {
           ...
           google()
       }
    }
    

    Kotlin

    dependencyResolutionManagement {
       ...
       repositories {
           ...
           google()
       }
    }
    
  2. Cronet용 Google Play 서비스 클라이언트 라이브러리에 대한 참조 포함 앱 모듈의 build.gradle 파일에 있는 dependencies 섹션에 다음 예에 나와 있습니다.

    Groovy

    dependencies {
       implementation 'com.google.android.gms:play-services-cronet:18.0.1'
    }
    

    Kotlin

    dependencies {
       implementation("com.google.android.gms:play-services-cronet:18.0.1")
    }
    

생성된 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 객체를 만드는 방법을 보여줍니다.

Kotlin

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 및 다음 예와 같이 필요한 추상 메서드를 구현합니다.

Kotlin

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()를 사용한 객체 메서드를 사용하여 축소하도록 요청합니다.

Kotlin

val executor: Executor = Executors.newSingleThreadExecutor()

자바

Executor executor = Executors.newSingleThreadExecutor();

UrlRequest 객체 만들기 및 구성

네트워크 요청을 만들려면 newUrlRequestBuilder() 드림 다음 메서드를 전달하는 CronetEngine의 메서드 도착 URL, 콜백 클래스의 인스턴스 및 실행자 객체입니다. newUrlRequestBuilder() 메서드는 UrlRequest.Builder 객체 이를 사용하여 UrlRequest 객체에 추가합니다.

Kotlin

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() 메서드를 호출합니다.

Kotlin

request.start()

자바

request.start();

이 섹션의 안내에 따라 네트워크를 만들고 전송할 수 있습니다. Cronet을 사용하여 요청을 실행합니다. 그러나 이 예시에서는 편의상 구현해 보겠습니다. UrlRequest.Callback만 인화 로그에 메시지를 보냅니다. 다음 섹션에서는 콜백을 제공하는 방법을 보여줍니다. 보다 유용한 시나리오를 지원하는 더 유용한 시나리오(예: 요청의 실패 감지에 사용됩니다.

네트워크 응답 처리

start()를 호출하면 메서드가 있으면 Cronet 요청 수명 주기가 시작됩니다. 앱에서 콜백을 지정하여 수명 주기 동안 요청을 처리합니다. 자세히 알아보려면 Cronet 요청 수명 주기를 참고하세요. 포드의 서브클래스를 만들어 콜백을 UrlRequest.Callback 및 다음과 같은 메서드를 구현합니다.

onRedirectReceived()

서버가 할 수 있습니다. 새 목적지로의 리디렉션을 따르려면 followRedirect() 드림 메서드를 사용하여 축소하도록 요청합니다. 그 외의 경우에는 cancel()를 사용합니다. 메서드를 사용하여 축소하도록 요청합니다. 다음 예에서는 메서드를 구현하는 방법을 보여줍니다.

Kotlin

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() 메서드는 모든 리디렉션을 따른 후에만 호출됩니다. 다음 코드는 는 메서드의 구현 예를 보여줍니다.

Kotlin

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()

응답 본문의 일부를 읽을 때마다 호출됩니다. 다음 코드는 다음 예는 메서드를 구현하고 응답 본문을 추출하는 방법을 보여줍니다.

Kotlin

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()

네트워크 요청이 성공적으로 완료되면 호출됩니다. 다음 예는 메서드를 구현하는 방법을 보여줍니다.

Kotlin

override fun onSucceeded(request: UrlRequest?, info: UrlResponseInfo?) {
    // The request has completed successfully.
}

자바

@Override
public void onSucceeded(UrlRequest request, UrlResponseInfo info) {
  // The request has completed successfully.
}
onFailed()

다음 날짜 이후에 어떤 이유로든 요청이 실패하면 호출됩니다. start() 메서드가 호출되었습니다. 이 다음 예는 메서드를 구현하고 오류:

Kotlin

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() 메서드를 사용하여 지도 가장자리에 패딩을 추가할 수 있습니다. 일단 호출하면 다른 메서드를 UrlRequest.Callback 클래스는 호출됩니다. 이 메서드를 사용하여 특정 작업을 처리하기 위해 할당된 리소스를 합니다. 다음 예에서는 메서드를 구현하는 방법을 보여줍니다.

Kotlin

override fun onCanceled(request: UrlRequest?, info: UrlResponseInfo?) {
    // Free resources allocated to process this request.
    ...
}

Java

@Override
public void onCanceled(UrlRequest request, UrlResponseInfo info) {
  // Free resources allocated to process this request.
  
}