साधारण अनुरोध भेजें

अपने फ़ोन में नेटवर्क ऑपरेशन करने के लिए, Cronet Library इस्तेमाल करने का तरीका जानें Android ऐप्लिकेशन. Cronet, Chromium नेटवर्क स्टैक है. इसे लाइब्रेरी के तौर पर उपलब्ध कराया गया है ऐप्लिकेशन में इस्तेमाल किए जा सकते हैं. लाइब्रेरी की सुविधाओं के बारे में ज़्यादा जानने के लिए, इसका उपयोग करके नेटवर्क ऑपरेशन करें Cronet.

अपने प्रोजेक्ट में लाइब्रेरी सेट अप करना

अपने प्रोजेक्ट की Cronet लाइब्रेरी में डिपेंडेंसी जोड़ने के लिए, यह तरीका अपनाएं:

  1. पुष्टि करें कि Android Studio में Google की Maven रिपॉज़िटरी का रेफ़रंस शामिल है आपके प्रोजेक्ट की settings.gradle फ़ाइल में, जैसा कि यहां दिखाया गया है उदाहरण:

    ग्रूवी

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

    Kotlin

    dependencyResolutionManagement {
       ...
       repositories {
           ...
           google()
       }
    }
    
  2. Cronet के लिए Google Play Services क्लाइंट लाइब्रेरी का रेफ़रंस शामिल करें आपके ऐप्लिकेशन मॉड्यूल की build.gradle फ़ाइल के dependencies सेक्शन में, इस तरह से नीचे दिए गए उदाहरण में दिखाया गया है:

    ग्रूवी

    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 services से लोड किए गए Cronet का इस्तेमाल किया जाएगा. कॉल करें CronetProviderInstaller.installProvider(Context) अनचाहे अपवादों से बचने के लिए, CronetEngine ऑब्जेक्ट बनाने से पहले CronetEngine बनाने के दौरान डिवाइस जैसी गड़बड़ियों की वजह से, कॉन्टेंट को फेंके जाने से रोका जा सकता है इसके लिए, Google Play services का अपडेट किया हुआ वर्शन ज़रूरी है.

ऐसे मामलों में जहां Cronet को Google Play सेवाओं से लोड नहीं किया जा सकता है, वहां ऐसे मामलों में 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()

Java

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.")
    }
}

Java

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 का इंस्टेंस पाने के लिए, इनमें से किसी एक का इस्तेमाल करें Executors क्लास के वे स्टैटिक तरीके जो वापस आते हैं एक Executor ऑब्जेक्ट. नीचे दिए गए उदाहरण में, Executor बनाने का तरीका बताया गया है newSingleThreadExecutor() का इस्तेमाल करके बनाया गया ऑब्जेक्ट तरीका:

Kotlin

val executor: Executor = Executors.newSingleThreadExecutor()

Java

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

Java

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

Java

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

Java

@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
}

Java

@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)
}

Java

@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.
}

Java

@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)
}

Java

@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.
  
}