加载前的毕加索图像网址查找

时间:2015-05-13 09:46:14

标签: android picasso

因此,我目前正在调查使用Picasso库替换项目中的大量自定义图像加载AsyncTask的可能性,这看起来很有希望。然而,有一个问题我并不完全确定如何使用毕加索来解决。

在这种情况下,我们正在为音乐曲目下载专辑封面,但是当我们要显示ListView时,我们只有轨道ID。首先,我们必须根据轨道ID查找Album Art URL,然后将其加载到ImageView中。目前我们有一个AsyncTask,我们在doInBackground()首先查找图片网址,然后从中加载Bitmap,然后将其粘贴到onPostExecute

有没有办法使用Picasso进行预先查找,或者我们是否必须将Picasso调用包装在首先执行查找的AsyncTask中(感觉它有点挫败了目的)。

更新:现在如何运作:

private class AlbumArtTask extends AsyncTask<String, Bitmap, Bitmap> {

    @Override
    protected Bitmap doInBackground(String... strings) {
        final String id = strings[0];

        // This part is what I'm asking for, basically to be able to make an Async
        // lookup of the url that will later be used by Picasso
        final Uri uri = getAlbumArtUriFromTrackId(id);

        // Creating the Bitmap and return it to be used in an ImageView
        // This part is handled by Picasso
        return bitmap = createBitmapFromUri(uri);
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        // load image into ImageView
    }
}

更新2:构成我之后

的例子
Picasso.with(mContext)
    .load(new UriProvider() {         

        // Get the actual image URI here
        public Uri getImageUri() {
            return getAlbumArtUriFromTrackId(id);
        }

     })

      // And load it here
     .into(mImageView); 

2 个答案:

答案 0 :(得分:1)

我必须为我的应用解决同样的问题。我使用OkHTTP拦截器来重定向请求。

这是我的皮卡萨宣言:

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new PhotoInterceptor());
Picasso picasso = new Picasso.Builder(context)
    .downloader(new OkHttpDownloader(client))
    .build();

这是拦截器的基本实现:

public class PhotoInterceptor implements Interceptor {

    Gson gson = new Gson();

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Response response = chain.proceed(request);
        if (response.isSuccessful()) {
            Photo photo = gson.fromJson(response.body().charStream(), Photo.class);
            if (photo!=null) {
                request = request.newBuilder()
                    .url(photo.getPhoto_file_url())
                    .build();
                response = chain.proceed(request);
            }
        }

        return response;
    }
}

答案 1 :(得分:0)

创建listView时,您必须使用Piccaso从相册艺术网址加载图片。然后在Track的Detail屏幕上,您必须调用实际图像URL以在imageview中设置它。

<强>被修改

{{1}}