我正在尝试使用Picasso将存储在aws S3上的图像加载到我的Android应用程序中,但是我得到的空白图像在我的logcat中没有错误,对于我来说,通过相关代码行进行一般调试没有任何问题。 我们对图片进行私密访问,因此图片网址无法在浏览器上运行。 我需要使用Picasso将图像显示到我的Android应用程序中。但它不起作用。
我的代码段
new Picasso.Builder(getApplicationContext()).downloader(new S3Downloader(getApplicationContext(), s3Client, bucket))
.build()
.load("https://s3-ea-east-8.amazonaws.com/music/MusicApp_3.jpg")
.placeholder(R.drawable.img_placeholder)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
通过使用上面的代码,图像只在安装应用程序后第一次显示。下一次它只显示占位符图像
我正在使用this library来显示图片。
问题不在于毕加索,而在于从“私人”网址加载图片。
请提出解决方案
答案 0 :(得分:1)
只需使用:
Picasso.with(getApplicationContext()).load(your_url).noFade().into(imageView);
答案 1 :(得分:0)
write below code to load image in Picasso.
variables:-
String file_path -->> this is your image file path
Imageview mViewHolder.img_post_photo -->> this is your imageview to load image.
Picasso.with(context) .load(file_path) .placeholder(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .into(mViewHolder.img_post_photo, new Callback() { @Override public void onSuccess() { } @Override public void onError() { Picasso.with(context) .load(file_path) .placeholder(R.mipmap.ic_launcher) .error(R.mipmap.ic_launcher) .into(mViewHolder.img_post_photo); } });
Set dependencies in your app build.gradle file:-
compile 'com.squareup.picasso:picasso:2.5.2'
hope this code helps you.
答案 2 :(得分:0)
您需要从S3客户端生成预先签名的Url,然后您可以将该网址传递给picasso。 该网址将公开,并且会有一个明确的日期。
答案 3 :(得分:0)
您可以使用以下代码集,这是一个aynctask,它将使用glide通过生成presignedurl来附加s3的私有图像。
Anonymous type can be replaced with lambda
可以这样称呼
public class sets3imageasync extends AsyncTask<Object, Void, String> {
// The list of objects we find in the S3 bucket
static final String s3bucket=bucket_name;
Context scontext;
ImageView image;
@Override
protected String doInBackground(Object... objects) {
// Queries files in the bucket from S3.
Calendar cal = Calendar.getInstance();
Log.d(TAG, "doInBackground: in progress");
cal.setTime(new Date());
cal.add(Calendar.HOUR, +1);
Date oneHourLater = cal.getTime();
AmazonS3Client s3 = (AmazonS3Client) objects[0];
scontext= (Context) objects[1];
image=(ImageView) objects[2];
String imagekey=(String) objects[3];
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(s3bucket, imagekey)
.withMethod(HttpMethod.GET)
.withExpiration(oneHourLater);
URL url = s3.generatePresignedUrl(generatePresignedUrlRequest);
Log.e("url was", url.toString());
return url.toString();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.d(TAG, "onPostExecute: completed "+s);
Glide.with(scontext).load(s)
.apply(new RequestOptions()
.centerCrop())
.placeholder(scontext.getResources().getDrawable(R.drawable.progress_animation))
.into((image));
}