تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ بهروز
استفاده از دیزاین پترن singleton در RequestQueue ها
پوریا شفیعی حل شده توسط پوریا شفیعی

با سلام 

میخواستم بدون برای استفاده کردن RequestQueue‌ها در داخل یک کلاس بصورت Singleton استفاده کنیم خوبه ؟

 

و من این کلاس رو از خود گوگل گرفتم و میخواستم بدون وقتی این کلاس ساخته شدش ایا لازم در کلاس GsonRequest هم در کانستراکتور RequestQueue مقدار دهی بشه یا RequestQueue رو حذف کنیم و فقط باید بصورت instance variable بیایم تعریف کنیم ؟  یا جوری دیگه استفاده میشه ؟

 

اینم کلاس MySingleton :

 

public class MySingleton {
    private static MySingleton instance;
    private RequestQueue requestQueue;
    private ImageLoader imageLoader;
    private static Context context;
    private MySingleton(Context context){
        this.context = context;
        requestQueue = getRequestQueue();
        imageLoader = new ImageLoader(requestQueue,
                new ImageLoader.ImageCache() {
            private final LruCache<String,Bitmap> cache = new LruCache<>(20);
                    @Nullable
                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }
                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url,bitmap);
                    }
                });
    }
    public static synchronized MySingleton getInstance(Context context){
        if (instance == null){
            instance = new MySingleton(context);
        }
        return instance;
    }
    private RequestQueue getRequestQueue() {
        if (requestQueue == null){
            requestQueue = Volley.newRequestQueue(context.getApplicationContext());
        }
        return requestQueue;
    }
    public <T> void addToRequestQueue(Request<T> request){
        getRequestQueue().add(request);
    }
    public ImageLoader getImageLoader(){
        return imageLoader;
    }
}

 

 

 

سلام وقت بخیر بهروز جان 

 

در برنامه نویسی راه حل‌های زیادی هست و این بسته به پروژه شماست که انتخاب کنید از چه راه حلی برید .

بله اگر اپلیکیشن ما مدام از نتورک استفاده میکنه بهتر هست از دیزاین پترن singleton استفاده کنم.

درمورد سوال دوم بهر حال لازم هست requestQueue رو مقدار دهی کنیم وگرنه با ارور null pointer مواجه میشیم.

نکته ای که هست از اونجایی که ممکن هست sample‌های خود گوگل با اموزش کمی متفاوت باشند(به دلیل استفاده‌های دیگر) پیشنهاد میکنم طبق اموزش جلو برید. و موردی که هست در اکثر مواقع ما از لایبرری Retrofit استفاده میکنیم به این دلیل که بیشترین سازگاری رو با لایبرری‌های دیگه داره پس اینکه خودتون رو زیاد درگیر Volley کنین پیشنهاد نمیکنم و صرفا همین که اشناییتی داشته باشید کفایت میکنه.

 

 

بهترین پاسخ
پوریا شفیعی ۱۸ خرداد ۱۴۰۰، ۱۶:۱۹