Glide 和 Picasso 无法从 YouTube 加载图片

Glide and Picasso not load images from YouTube

我是 ImageView、Picasso、Glide 的新手。 我只想从 url 加载图像,我已经尝试过 Glide 和 Picasso。 它们都很好地加载图像,但如果我尝试从 youtube(缩略图)加载图像 - 不加载。 // http://i.ytimg.com/vi/z0NfI2NeDHI/sddefault.jpg - 未加载

MainActivity.java

imageView = findViewById(R.id.image);
videoImg = ""
fetchData.execute(); //returns link for image to videoImg
Glide.with(this)
                .load(videoImg)
                .placeholder(R.drawable.ic_launcher_background)
                .error(R.drawable.ic_launcher_foreground)
                .into(imageView);
        Picasso.get().load(videoImg).into(imageView);

activity_main.xml

<ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

LogCat

W/Glide: Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotated AppGlideModule implementation or LibraryGlideModules will be silently ignored
W/Glide: Load failed for null with size [0x0]
    class com.bumptech.glide.load.engine.GlideException: Received null model

我认为您面临的问题与 Glide、Picasso 或其他库无关。我尝试使用您使用 Glide 提供的图像 link,它按预期工作。

我有根据的猜测是您的设备正在使用某种受限网络,因此它会阻止来自 YouTube 端点的请求 in/out。如果您从另一个网络连接,它会工作得很好。

如果您只想将图像加载到 ImageView 中,只需坚持使用一个库,比如说 Glide。

  1. 首先通过查看您的代码,您应该像这样声明 videoImg:

    videoImg = "http://i.ytimg.com/vi/z0NfI2NeDHI/sddefault.jpg";

  2. 然后检查你的依赖,你应该添加正确的如下:

    implementation 'com.github.bumptech.glide:glide:4.9.0'

    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

不要忘记将 mavenCentral() 添加到 builscript 下项目文件的存储库中

  1. 在您的清单中添加互联网权限:

    <uses-permission android:name="android.permission.INTERNET"/>

好吧,尴尬的局面.. 我使用自定义 AsyncTask,其中 returns String(link 到 yt 图像)(在我的例子中是 videoImg) 所以我的代码是:

void ShowImage(View v){
    fetchData.execute();
    Glide.with(MainActivity.this)
                .load(videoImg)
                .placeholder(R.drawable.ic_launcher_background)
                .error(R.drawable.ic_launcher_foreground)
                .into(imageView);
}

所以 AsyncTask 没有时间下载 link 而 Glide 只是试图加载空字符串..

再次抱歉..