android - জনক - ভলিবলের দাম




ভলি টাইমআউট সময় পরিবর্তন করুন (6)

আমি অ্যান্ড্রয়েডের জন্য আমার সার্ভারের অনুরোধ করার জন্য নতুন ভলি ফ্রেমওয়ার্ক ব্যবহার করি। কিন্তু প্রতিক্রিয়া পাওয়ার আগে এটি সময়সীমা, যদিও এটি প্রতিক্রিয়া জানায়।

আমি এই কোড যোগ করার চেষ্টা করেছিলাম:

HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);

ভলি ফ্রেমওয়ার্কের HttpClientStack একটি ভিন্ন পূর্ণসংখ্যা (50000) -এ, কিন্তু এটি এখনও 50 সেকেন্ডের আগে শেষ হয়ে যায়।

একটি দীর্ঘ মান টাইমআউট পরিবর্তন করার একটি উপায় আছে কি?


Android Volley Timeout হ্যান্ডেল করার জন্য আপনাকে RetryPolicy ব্যবহার করতে হবে

RetryPolicy

  • ভলি আপনার অনুরোধের জন্য আপনার RetryPolicy বাস্তবায়ন করার একটি সহজ উপায় সরবরাহ করে।
  • ভলি সব অনুরোধের জন্য 5 সেকেন্ড ডিফল্ট সকেট এবং ConnectionTImeout সেট করে।

RetryPolicy এমন একটি ইন্টারফেস যেখানে আপনাকে একটি RetryPolicy সময় কোনও নির্দিষ্ট অনুরোধটি পুনরায় চেষ্টা করতে চান তার যুক্তি প্রয়োগ করতে হবে।

এটা এই তিনটি পরামিতি সঙ্গে পুলিশ

  • সময়সীমা - প্রতি পুনরায় চেষ্টা প্রচেষ্টা প্রতি মিলিতে সকেট টাইমআউট নির্দিষ্ট করে।
  • Retries সংখ্যা - বারবার পুনরায় চেষ্টা করার চেষ্টা করা হয়।
  • ব্যাক অফ মাল্টিপ্লায়ার - একটি গুণক যা প্রতিটি পুনরায় চেষ্টা করার জন্য সকেটে সূচকীয় সময় সেট নির্ধারণ করতে ব্যবহৃত হয়।

প্রাক্তন জন্য। যদি RetryPolicy এই মানগুলির সাথে তৈরি করা হয়

সময়সীমা - 3000 মিঃ, পুনরায় চেষ্টা প্রচেষ্টা - 2, ব্যাক অফ মাল্টিপ্লায়ার - 2.0

পুনরায় চেষ্টা করুন 1:

  • সময় = সময় + (সময় * ব্যাক বন্ধ গুণক);
  • সময় = 3000 + 6000 = 9000 মি
  • সকেট সময়সীমা = সময়;
  • 9 সেকেন্ডের সকেট টাইমআউট দিয়ে প্রেরণ অনুরোধ

পুনরায় চেষ্টা করুন 2:

  • সময় = সময় + (সময় * ব্যাক বন্ধ গুণক);
  • সময় = 9000 + 18000 = 27000 মি
  • সকেট সময়সীমা = সময়;
  • 27 সেকেন্ডের সকেট টাইমআউট দিয়ে প্রেরণ অনুরোধ

তাই পুনরায় চেষ্টা প্রচেষ্টা শেষে 2 যদি এখনও সকেট টাইমআউট হয় তবে ভলি আপনার UI এ TimeoutError ত্রুটি ফেলে দেবে ত্রুটি প্রতিক্রিয়া হ্যান্ডলার।

//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. 
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

আমি setCurrentTimeout(int timeout) একটি পদ্ধতি সেট setCurrentTimeout(int timeout) যোগ করে শেষ RetryPolicy এবং এটি RetryPolicy বাস্তবায়ন করা হয়েছে।

তারপর আমি অনুরোধ ক্লাসে একটি setCurrentTimeout(int timeout) যোগ করে এবং এটি বলা হয়।

এই কাজ করতে বলে মনে হচ্ছে।

ওপেন সোর্সের জন্য পথ এবং হুরয়ে আমার অলসতা জন্য দুঃখিত।


বিকল্প সমাধান যদি উপরের সব সমাধান আপনার জন্য কাজ করে না

ডিফল্টরূপে, ভল্লি setConnectionTimeout() এবং setReadTimeout() উভয়ের জন্য setConnectionTimeout() এর মান সমানভাবে সমানভাবে সেট করে। আমার ক্ষেত্রে, Volley বৃহত্তর তথ্য খণ্ডের জন্য সময়সীমার ব্যতিক্রম ছুঁড়ে ফেলে:

com.android.volley.toolbox.HurlStack.openConnection(). 

আমার সমাধান এমন একটি ক্লাস তৈরি করে যা আমার নিজস্ব সেট setReadTimeout() নীতি সহ HttpStack প্রসারিত করে। তারপর RequestQueue অনুসরণ হিসাবে এটি ব্যবহার করুন:

Volley.newRequestQueue(mContext.getApplicationContext(), new MyHurlStack())

শুধু আমার পদ্ধতির সঙ্গে অবদান। ইতিমধ্যে উত্তর হিসাবে, RetryPolicy যেতে উপায়। তবে যদি আপনার সমস্ত অনুরোধগুলির জন্য ডিফল্টের চেয়ে একটি নীতির প্রয়োজন হয় তবে আপনি এটি একটি বেস অনুরোধ ক্লাসে সেট করতে পারেন, তাই আপনার অনুরোধগুলির সমস্ত ক্ষেত্রে নীতি সেট করতে হবে না।

এটার মতো কিছু:

public class BaseRequest<T> extends Request<T> {

    public BaseRequest(int method, String url, Response.ErrorListener listener) {
        super(method, url, listener);
        setRetryPolicy(getMyOwnDefaultRetryPolicy());
    }
}

আমার ক্ষেত্রে আমার কাছে একটি GsonRequest রয়েছে যা এই বেসRequest থেকে প্রসারিত হয়, তাই আমি নির্দিষ্ট অনুরোধের জন্য নীতিটি সেটিকে ভুলে যাওয়ার ঝুঁকিটি চালাই না এবং যদি কিছু নির্দিষ্ট অনুরোধের প্রয়োজন হয় তবে আপনি এখনও এটির উপরে নজর রাখতে পারেন।


/**
 * @param request
 * @param <T>
 */
public <T> void addToRequestQueue(Request<T> request) {

    request.setRetryPolicy(new DefaultRetryPolicy(
            MY_SOCKET_TIMEOUT_MS,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    getRequestQueue().add(request);
}

int MY_SOCKET_TIMEOUT_MS=500;

 stringRequest.setRetryPolicy(new DefaultRetryPolicy(
                MY_SOCKET_TIMEOUT_MS,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));




android-volley