Glide-4.0.0 मिसिंग प्लेसहोल्डर, त्रुटि, GlideApp और इसकी विधि प्लेसहोल्डर, त्रुटि को हल नहीं करता है


84

मैं एक छवि डाउनलोड करने और दिखाने के लिए ग्लाइड एंड्रॉइड लाइब्रेरी का उपयोग करना चाहता हूं ImageView

पिछले संस्करण में हमने इस्तेमाल किया:

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

लेकिन मैंने ग्लाइड प्रलेखन देखा है:

यह कहते हैं GlideApp.with()इसके बजाय का उपयोग करेंGlide.with()

मेरी चिंता एक लापता प्लेसहोल्डर, त्रुटि, GlideApp, और अन्य विकल्प हैं।

मै इस्तेमाल कर रहा हूँ

 compile 'com.github.bumptech.glide:glide:4.0.0'

मैं कहाँ गलत कर रहा हूँ? यहां संदर्भ के साथ ।

कैसे GlideApp.with()इस्तेमाल किया गया है?

एपीआई उसी पैकेज में उत्पन्न होता है AppGlideModuleऔर GlideAppडिफ़ॉल्ट रूप से नाम दिया जाता है। एप्लिकेशन GlideApp.with()इसके बजाय सभी लोड शुरू करके एपीआई का उपयोग कर सकते हैं Glide.with():

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);


2
क्या आपके पास GlideApp के बारे में विचार है? कैसे उपयोग करें और कब उपयोग करें? .. अगर ऊपर नहीं करना है
रितेश भावसार


इस प्रलेखन का पालन करें bumptech.github.io/glide/doc/getting-started.html#applicatio ns
रोहन पवार

जवाबों:


222

अनुरोधों का उपयोग करके देखें :

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

संपादित करें

यदि .setDefaultRequestOptions(requestOptions)काम नहीं करता है, तो उपयोग करें .apply(requestOptions):

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

EDIT 2 बोनस

यहां ग्लाइड -4 में कुछ अन्य बदलाव किए गए हैं


मैं यह भी नहीं जानता कि @RiteshBhavsar अपने डिवाइस में नए ग्लाइड लिब के साथ काम कर रहा है, आप इसे देख सकते हैं
AskNilesh

@NileshRathod RequestOptions का उपयोग बिल्डर शैली में किया जाना चाहिए: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
अलेक्जेंडर उखोव

1
यह GlideApp के बिना एक वर्कअराउंड है। GlideApp कैसे जोड़ें, यह जानने के लिए github.com/bumptech/glide/issues/1945 देखें ।
कूलमाइंड

क्या बिटमैप आउटपुट प्राप्त करने का कोई तरीका है जैसे बिटमैप बिटमैप = ग्लाइड आउटपुट
विपुल चौहान

30

यदि आप ग्लाइड पैकेज निर्भरता का compile 'com.github.bumptech.glide:glide:3.7.0'उपयोग करते हैं, तो नीचे दिए गए कोड का उपयोग करना चाहिए:

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);

नोट: प्रलेखन के रूप में ,

गोल चित्र: CircleImageView / CircularImageView / RoundedImageView को TransitionDrawable ((.crossFade) (.thumbnail () या .placeholder ()) और एनिमेटेड GIFs के साथ समस्याएँ ज्ञात हैं, एक BitmapTransformation (.circleCrop) का उपयोग v4 या v4 में उपलब्ध होगा। .dontAnimate () समस्या को ठीक करने के लिए।

नवीनतम अद्यतन संस्करण compile com.github.bumptech.glide:glide:4.1.1तो नीचे दिए गए कोड का उपयोग करना चाहिए:

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH)
                    .dontAnimate()
                    .dontTransform();

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

सरकना, बग फिक्स और सुविधाओं का नवीनतम संस्करण देखें ।


ग्लाइड ऐसी अजीब लाइब्रेरी है
जिसका

हां @AnandSavjani वे GitHub में अपडेट नहीं हुए, लेकिन आप उनके अपडेट इस लिंक github.com/bumptech/glide/releases
ND1010_

1
यदि आपको ग्लाइड पसंद नहीं है, तो आप छवियों को लोड करने के लिए अपना खुद का तरीका बना सकते हैं, gif जो कैशिंग भी प्रदान करते हैं और आप इसे स्वतंत्र रूप से
गिथब

10

यदि आप GlideApp का उपयोग करना चाहते हैं तो आपको dependenciesस्क्रीनशॉट पर एनोटेशन प्रोसेसर की तरह जोड़ना होगा :

अपने प्रोजेक्ट में GlideApp कैसे जोड़ें

फिर अपने आवेदन में एक AppGlideModule कार्यान्वयन शामिल करें:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

@GlideModuleएनोटेशन के बारे में मत भूलना । फिर आपको प्रोजेक्ट बनाने की आवश्यकता है। और GlideAppस्वतः उत्पन्न हो जाएगा।


1
सिंक सिंकेल के बाद यह काम नहीं कर रहा था। लेकिन हमें इसे काम करने के लिए पुनर्निर्माण करने की आवश्यकता है।
रवि यादव

6

निर्भरता:

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

उचित रूप से एनोटेटेड AppGlideModule कार्यान्वयन जोड़ें:

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

इसके अलावा, यदि आपने जैक विकल्प का उपयोग किया है, तो निम्न समान त्रुटियों से बचने के लिए, आपको एंड्रॉइड स्टूडियो 3.0.0 पूर्वावलोकन का उपयोग करने की आवश्यकता है।

त्रुटि: कार्य के लिए निष्पादन विफल रहा ': app: transformJackWithJackForDebug'। com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: अभी तक लागू नहीं


6

हमें RequestOptions का भी उपयोग करने की कोई आवश्यकता नहीं है।

जनरेट किया गया API एक GlideApp क्लास जोड़ता है, जो RequestBuilder और RequestOptions उपवर्गों तक पहुँच प्रदान करता है। RequestOptions उपवर्ग में RequestOptions और GlideExtensions में परिभाषित किसी भी तरीके शामिल हैं। RequestBuilder उपवर्ग उपयोग किए गए बिना सभी अनुरोधित उप-उपवर्गों में सभी तरीकों तक पहुंच प्रदान करता है:

ग्लाइड का उपयोग करना : -

उत्पन्न एपीआई के बिना एक अनुरोध इस तरह दिख सकता है:

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

GlideApp का उपयोग करना : -

उत्पन्न एपीआई के साथ, RequestOptionsकॉल इनबिल्ट हो सकते हैं:

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

आप कई लोड करने के लिए विकल्पों के समान सेट को लागू करने के लिए अभी भी उत्पन्न अनुरोध उपवर्ग का उपयोग कर सकते हैं, लेकिन अधिकांश मामलों में अनुरोधित किया गया अनुरोधित उप-वर्ग अधिक सुविधाजनक हो सकता है।



2

यदि आप अपने ऐप में हर जगह एक सामान्य प्लेसहोल्डर का उपयोग करना चाहते हैं तो आप इसे इस तरह से कर सकते हैं:

जैसा कि हम Glide v4 से GlideModule बना रहे हैं , आप इस वर्ग को अपने प्रोजेक्ट में कॉपी / पेस्ट कर सकते हैं ताकि आप GlideApp क्लास का उपयोग कर सकें (अधिक चरणों के लिए - इसका अनुसरण करें) :

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

आप डिफ़ॉल्ट के रूप में सेट करने के लिए सभी अनुरोध विकल्प यहां दे सकते हैं ।

इस वर्ग को बनाने के .placeholderसाथ आपको उपयोग करने की आवश्यकता नहीं है GlideApp, यह स्वचालित रूप से लागू किया जाएगा।


1
RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.null_image_profile)
            .error(R.drawable.null_image_profile);
    //.centerCrop()
    //.diskCacheStrategy(DiskCacheStrategy.ALL)
    //.priority(Priority.HIGH);

    Glide.with(context).load(imageUrl)
            .apply(options)
            .into(profileImage);

1
कुछ स्पष्टीकरण जोड़ें - अकेले एक सादे कोड ब्लॉक नहीं कि सभी जानकारीपूर्ण है
CertainPerformance
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.