Glide-4.0.0 Brak symbolu zastępczego, błąd, GlideApp i nie rozwiązuje symbolu zastępczego metody, błąd

84

Chcę użyć biblioteki Glide dla systemu Android, aby pobrać obraz i pokazać go w ImageView.

W poprzedniej wersji użyliśmy:

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

Ale widziałem dokumentację Glide:

mówi GlideApp.with()zamiast tego użyjGlide.with()

Moim problemem jest brak symbolu zastępczego, błąd, aplikacja GlideApp i inne opcje.

ja używam

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

Gdzie ja robię źle? W nawiązaniu do tutaj .

Jak GlideApp.with()został użyty?

Interfejs API jest generowany w tym samym pakiecie co AppGlideModulei jest GlideAppdomyślnie nazwany . Aplikacje mogą korzystać z interfejsu API, uruchamiając wszystkie obciążenia za pomocą GlideApp.with()zamiast Glide.with():

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);
Ritesh Bhavsar
źródło
1
Możliwy duplikat elementu zastępczego / błędu / wycofania w Glide v4
Oussema Aroua
2
Masz pomysł na temat GlideApp? jak używać i kiedy użyć .. jeśli nie zadowolić upvote?
Ritesh Bhavsar
brakuje
ci kroku
Postępuj zgodnie z tą dokumentacją bumptech.github.io/glide/doc/getting-started.html#applicatio‌ ns
Rohan Pawar

Odpowiedzi:

222

Spróbuj użyć RequestOptions :

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

EDYTOWAĆ

Jeśli .setDefaultRequestOptions(requestOptions)nie działa, użyj .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);

EDYCJA 2 Bonus

Oto kilka innych zmian w Glide-4

AskNilesh
źródło
że ja też nie wiem, @RiteshBhavsar działa na moim urządzeniu z nową biblioteką Glide, możesz to sprawdzić
AskNilesh
@NileshRathod RequestOptions należy używać w stylu konstruktora: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Alexander Ukhov,
1
Jest to obejście bez GlideApp. Odwiedź stronę github.com/bumptech/glide/issues/1945, aby dowiedzieć się, jak dodać GlideApp.
CoolMind,
czy jest jakiś sposób, aby uzyskać takie wyjście Bitmap Bitmap bitmap = wyjście Glide
Vipul Chauhan
30

Jeśli używasz zależności pakietu Glide compile 'com.github.bumptech.glide:glide:3.7.0', użyj powinien być poniższy kod:

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

Uwaga: tak jak w dokumentacji ,

Round Pictures: CircleImageView / CircularImageView / RoundedImageView są znane z problemów z TransitionDrawable (.crossFade () z .thumbnail () lub .placeholder ()) i animowanymi plikami GIF, użyj BitmapTransformation (.circleCrop () będzie dostępny w wersji 4) lub .dontAnimate (), aby rozwiązać problem.

Najnowszą zaktualizowaną wersją, którą compile com.github.bumptech.glide:glide:4.1.1następnie użyj, powinno być użycie poniższego kodu:

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

Zobacz najnowszą wersję Glide, poprawek błędów i funkcji .

ND1010_
źródło
glide to taka dziwna biblioteka, której nie aktualizowano na github
Anand Savjani
Ya @AnandSavjani nie zaktualizowali się w GitHub, ale możesz znaleźć ich aktualizacje pod tym linkiem github.com/bumptech/glide/releases
ND1010_
1
Jeśli nie lubisz szybowania, możesz stworzyć własny sposób na ładowanie obrazów, gifów, które zapewniają również buforowanie i możesz swobodnie przesyłać je na github i zawsze aktualizować
ND1010_
10

Jeśli chcesz korzystać z GlideApp, musisz dodać do dependenciesprocesora adnotacji jak na zrzucie ekranu:

Jak dodać GlideApp do swojego projektu

Następnie umieść w aplikacji implementację AppGlideModule:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

Nie zapomnij o @GlideModuleadnotacji. Następnie musisz zbudować projekt. I GlideAppzostanie wygenerowany automatycznie.

Vlad Pylyp
źródło
1
Nie działało po synchronizacji gradle. Ale musimy przeprowadzić odbudowę, aby to zadziałało.
Ravi Yadav,
6

Zależności:

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

Dodaj implementację AppGlideModule z odpowiednią adnotacją:

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

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

Ponadto, jeśli użyłeś opcji jack, aby uniknąć następujących podobnych błędów, musisz użyć podglądu Android Studio 3.0.0.

Błąd: nie powiodło się wykonanie zadania „: app: transformJackWithJackForDebug”. com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: jeszcze nie zaimplementowano

zhen She
źródło
6

Nie musimy również używać RequestOptions.

Wygenerowany interfejs API dodaje klasę GlideApp, która zapewnia dostęp do podklas RequestBuilder i RequestOptions. Podklasa RequestOptions zawiera wszystkie metody w RequestOptions i wszystkie metody zdefiniowane w GlideExtensions. Podklasa RequestBuilder zapewnia dostęp do wszystkich metod w wygenerowanej podklasie RequestOptions bez konieczności stosowania apply:

Korzystanie z Glide : -

Żądanie bez wygenerowanego interfejsu API może wyglądać następująco:

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

Korzystanie z GlideApp : -

Dzięki wygenerowanemu interfejsowi API RequestOptionswywołania można wstawiać:

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

Nadal można używać wygenerowanej podklasy RequestOptions, aby zastosować ten sam zestaw opcji do wielu obciążeń, ale wygenerowana podklasa RequestBuilder może być wygodniejsza w większości przypadków.

Shubham Sejpal
źródło
4

Pracujący

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)
Gurwinder Singh
źródło
2

Jeśli chcesz używać wspólnego symbolu zastępczego wszędzie w aplikacji, możesz to zrobić w następujący sposób:

Ponieważ tworzymy GlideModule z Glide v4 , możesz skopiować / wkleić tę klasę do swojego projektu, abyś mógł używać klasy GlideApp (więcej kroków - wykonaj to) :

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

Możesz tutaj podać wszystkie opcje żądań, aby ustawić je jako domyślne .

Tworząc tej klasy nie muszą korzystać .placeholderze GlideAppzostanie on automatycznie zastosowany.

Pratik Butani
źródło
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);
Trk
źródło
1
Proszę dodać wyjaśnienie - sam zwykły blok kodu nie jest zbyt pouczający
CertainPerformance