একটি সহজ অনুরোধ পাঠান

আপনার অ্যান্ড্রয়েড অ্যাপে নেটওয়ার্ক ক্রিয়াকলাপ সম্পাদন করতে ক্রনেট লাইব্রেরি কীভাবে ব্যবহার করবেন তা শিখুন। Cronet হল Chromium নেটওয়ার্ক স্ট্যাক যা আপনার অ্যাপে ব্যবহার করার জন্য একটি লাইব্রেরি হিসাবে উপলব্ধ করা হয়েছে। লাইব্রেরি বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, Cronet ব্যবহার করে নেটওয়ার্ক অপারেশন সম্পাদন করুন দেখুন।

আপনার প্রকল্পে লাইব্রেরি সেট আপ করুন

আপনার প্রকল্পে Cronet লাইব্রেরিতে নির্ভরতা যোগ করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. যাচাই করুন যে Android স্টুডিও আপনার প্রকল্পের settings.gradle ফাইলে Google এর Maven সংগ্রহস্থলের একটি রেফারেন্স অন্তর্ভুক্ত করেছে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    গ্রোভি

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

    কোটলিন

    dependencyResolutionManagement {
       ...
       repositories {
           ...
           google()
       }
    }
    
  2. আপনার অ্যাপ মডিউলের build.gradle ফাইলের dependencies বিভাগে ক্রোনেটের জন্য Google Play পরিষেবা ক্লায়েন্ট লাইব্রেরির একটি রেফারেন্স অন্তর্ভুক্ত করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    গ্রোভি

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

    কোটলিন

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

এই নির্ভরতা যোগ করা হলে CronetEngine অবজেক্ট তৈরি করা হলে Google Play পরিষেবা থেকে লোড করা Cronet ব্যবহার করা হবে। Google Play পরিষেবাগুলির একটি আপডেট সংস্করণের প্রয়োজনের ডিভাইসগুলির মতো ত্রুটিগুলির কারণে CronetEngine তৈরির সময় অপ্রত্যাশিত ব্যতিক্রমগুলিকে নিক্ষেপ করা থেকে রোধ করতে CronetEngine অবজেক্টগুলি তৈরি করার আগে CronetProviderInstaller.installProvider(Context) এ কল করুন৷

যেসব ক্ষেত্রে Google Play পরিষেবাগুলি থেকে Cronet লোড করা যায় না, সেখানে Cronet-এর API-এর একটি কম কার্যকারিতা প্রয়োগ করা হয় যা ব্যবহার করা যেতে পারে। এই ফল-ব্যাক বাস্তবায়ন ব্যবহার করতে, org.chromium.net:cronet-fallback এর উপর নির্ভর করুন এবং new JavaCronetProvider(context).createBuilder() কল করুন।

একটি নেটওয়ার্ক অনুরোধ তৈরি করুন

এই বিভাগটি দেখায় কিভাবে ক্রনেট লাইব্রেরি ব্যবহার করে একটি নেটওয়ার্ক অনুরোধ তৈরি এবং পাঠাতে হয়। নেটওয়ার্ক অনুরোধ পাঠানোর পরে, আপনার অ্যাপটি নেটওয়ার্ক প্রতিক্রিয়া প্রক্রিয়া করা উচিত।

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

আপনি একটি CronetEngine অবজেক্ট কনফিগার করতে Builder ক্লাস ব্যবহার করতে পারেন, উদাহরণস্বরূপ আপনি ক্যাশিং এবং ডেটা কম্প্রেশনের মত বিকল্পগুলি প্রদান করতে পারেন। আরও তথ্যের জন্য, 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 এর একটি উদাহরণ পেতে, Executors ক্লাসের একটি স্ট্যাটিক পদ্ধতি ব্যবহার করুন যা একটি Executor অবজেক্ট ফেরত দেয়। নিম্নলিখিত উদাহরণ দেখায় কিভাবে newSingleThreadExecutor() পদ্ধতি ব্যবহার করে একটি Executor অবজেক্ট তৈরি করতে হয়:

কোটলিন

val executor: Executor = Executors.newSingleThreadExecutor()

জাভা

Executor executor = Executors.newSingleThreadExecutor();

একটি UrlRequest অবজেক্ট তৈরি এবং কনফিগার করুন

নেটওয়ার্ক অনুরোধ তৈরি করতে, গন্তব্য URL পাস করার CronetEngine এর newUrlRequestBuilder() পদ্ধতিতে কল করুন, আপনার কলব্যাক ক্লাসের একটি উদাহরণ এবং এক্সিকিউটর অবজেক্ট। 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();

UrlRequest এর উদাহরণ কনফিগার করতে আপনি Builder ক্লাস ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি অগ্রাধিকার বা HTTP ক্রিয়া নির্দিষ্ট করতে পারেন। আরও তথ্যের জন্য, UrlRequest.Builder দেখুন।

নেটওয়ার্ক টাস্ক শুরু করতে, অনুরোধের start() পদ্ধতিতে কল করুন:

কোটলিন

request.start()

জাভা

request.start();

এই বিভাগে নির্দেশাবলী অনুসরণ করে, আপনি Cronet ব্যবহার করে একটি নেটওয়ার্ক অনুরোধ তৈরি করতে এবং পাঠাতে পারেন। যাইহোক, সরলতার জন্য, UrlRequest.Callback এর উদাহরণ বাস্তবায়ন শুধুমাত্র লগে একটি বার্তা প্রিন্ট করে। নিম্নলিখিত বিভাগটি দেখায় যে কীভাবে একটি কলব্যাক বাস্তবায়ন প্রদান করতে হয় যা আরও দরকারী পরিস্থিতিতে সমর্থন করে, যেমন প্রতিক্রিয়া থেকে ডেটা বের করা এবং অনুরোধে ব্যর্থতা সনাক্ত করা।

নেটওয়ার্ক প্রতিক্রিয়া প্রক্রিয়া

একবার আপনি start() পদ্ধতিতে কল করলে, Cronet অনুরোধ জীবনচক্র শুরু হয়। আপনার অ্যাপটিকে একটি কলব্যাক নির্দিষ্ট করে জীবনচক্রের সময় অনুরোধটি পরিচালনা করা উচিত। জীবনচক্র সম্পর্কে আরও জানতে, Cronet অনুরোধ জীবনচক্র দেখুন। আপনি 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()

নেটওয়ার্ক অনুরোধ সফলভাবে সম্পন্ন হলে আহ্বান করা হয়। নিম্নলিখিত উদাহরণ দেখায় কিভাবে পদ্ধতি বাস্তবায়ন করতে হয়:

কোটলিন

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() মেথড কল করার পর কোনো কারণে অনুরোধ ব্যর্থ হলে আহ্বান করা হয়। নিম্নলিখিত উদাহরণ দেখায় কিভাবে পদ্ধতি বাস্তবায়ন এবং ত্রুটি সম্পর্কে তথ্য পেতে:

কোটলিন

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 ক্লাসের অন্য কোনো পদ্ধতি চালু করা হয় না। আপনি একটি অনুরোধ প্রক্রিয়া করার জন্য বরাদ্দ সম্পদ বিনামূল্যে করতে এই পদ্ধতি ব্যবহার করতে পারেন. নিম্নলিখিত উদাহরণ দেখায় কিভাবে পদ্ধতি বাস্তবায়ন করতে হয়:

কোটলিন

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

জাভা

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