Android - 如何在不使用 picasso 存储/缓存的情况下加载图像
Android - how to load image without storing / caching with picasso
我使用 firebase api 发送通知。我处理标题和图像 Url 键。
我使用 image url 键将带有 picasso 的图像加载到 imageview 中。
我的问题是“我发送了一个通知但我没有点击它,在第一次通知后我发送了第二个不同图像的通知url。我点击了第二个通知。应用程序启动并且我在第一个地址的图像视图中看到了图片。
我的意思是第一张通知图片 url 是:www.....com/11.jpg
第二张图片 url 是:www.....com/22.jpg
所以,当我点击最后一条通知时,我应该看到 www.....com/22.jpg 而不是 www.....com/11.jpg 。
Intent 意图 = getIntent();
String url = intent.getStringExtra("imgUrl");
String catTitle = intent.getStringExtra("catTitle");
imageView = (ImageView) findViewById(R.id.thumbnail);
Picasso.with(this).load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.resize(300,250)
.into(imageView);
而且我调试了应用程序,url 是正确的,但是 imageview 中的图片不是那个图片。显示解决此问题的方法。
String message = remoteMessage.getData().get("message");
//imageUri will contain URL of the image to be displayed with Notification
String imageUri = remoteMessage.getData().get("image");
String catTitle = remoteMessage.getData().get("catTitle");
//To get a Bitmap image from the URL received
bitmap = getBitmapfromUrl(imageUri);
sendNotification(message, imageUri, bitmap,catTitle/*,warn,TrueOrFlase*/);
}
这是我的名字。
private void sendNotification(String messageBody, String imgUrl, Bitmap image, String catTitle/*,String warn, String TrueOrFalse*/) {
Intent intent = new Intent(this, AnotherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//intent.putExtra("AnotherActivity", TrueOrFalse);
intent.putExtra("imgUrl", imgUrl);
intent.putExtra("catTitle", catTitle);
//intent.putExtra("bitmap",bitmap);
//intent.putExtra("warn", warn);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setLargeIcon(image)/*Notification icon image*/
.setSmallIcon(R.drawable.ic_stat_onesignal_default)
.setContentTitle(messageBody)
.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(image))/*Notification with Image*/
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 , notificationBuilder.build());
}
尝试使用 NO_STORE
政策:
Picasso.with(this).load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
NO_CACHE
Skips memory cache lookup when processing a request.
NO_STORE
Skips storing the final result into memory cache. Useful for one-off
requests to avoid evicting other bitmaps from the cache.
更新
您必须为您的通知使用不同的 ID 以避免被替换:
notificationManager.notify(0 , notificationBuilder.build());
如果您没有 ID,可以使用随机数:
int randomNum = 0 + rand.nextInt((999 - 0) + 1);
int notificationID = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE) + randomNum;
notificationManager.notify(notificationID, notificationBuilder.build());
我使用 firebase api 发送通知。我处理标题和图像 Url 键。
我使用 image url 键将带有 picasso 的图像加载到 imageview 中。 我的问题是“我发送了一个通知但我没有点击它,在第一次通知后我发送了第二个不同图像的通知url。我点击了第二个通知。应用程序启动并且我在第一个地址的图像视图中看到了图片。
我的意思是第一张通知图片 url 是:www.....com/11.jpg 第二张图片 url 是:www.....com/22.jpg
所以,当我点击最后一条通知时,我应该看到 www.....com/22.jpg 而不是 www.....com/11.jpg 。
Intent 意图 = getIntent();
String url = intent.getStringExtra("imgUrl");
String catTitle = intent.getStringExtra("catTitle");
imageView = (ImageView) findViewById(R.id.thumbnail);
Picasso.with(this).load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.resize(300,250)
.into(imageView);
而且我调试了应用程序,url 是正确的,但是 imageview 中的图片不是那个图片。显示解决此问题的方法。
String message = remoteMessage.getData().get("message");
//imageUri will contain URL of the image to be displayed with Notification
String imageUri = remoteMessage.getData().get("image");
String catTitle = remoteMessage.getData().get("catTitle");
//To get a Bitmap image from the URL received
bitmap = getBitmapfromUrl(imageUri);
sendNotification(message, imageUri, bitmap,catTitle/*,warn,TrueOrFlase*/);
}
这是我的名字。
private void sendNotification(String messageBody, String imgUrl, Bitmap image, String catTitle/*,String warn, String TrueOrFalse*/) {
Intent intent = new Intent(this, AnotherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//intent.putExtra("AnotherActivity", TrueOrFalse);
intent.putExtra("imgUrl", imgUrl);
intent.putExtra("catTitle", catTitle);
//intent.putExtra("bitmap",bitmap);
//intent.putExtra("warn", warn);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setLargeIcon(image)/*Notification icon image*/
.setSmallIcon(R.drawable.ic_stat_onesignal_default)
.setContentTitle(messageBody)
.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(image))/*Notification with Image*/
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 , notificationBuilder.build());
}
尝试使用 NO_STORE
政策:
Picasso.with(this).load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
NO_CACHE
Skips memory cache lookup when processing a request.
NO_STORE
Skips storing the final result into memory cache. Useful for one-off requests to avoid evicting other bitmaps from the cache.
更新
您必须为您的通知使用不同的 ID 以避免被替换:
notificationManager.notify(0 , notificationBuilder.build());
如果您没有 ID,可以使用随机数:
int randomNum = 0 + rand.nextInt((999 - 0) + 1);
int notificationID = (int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE) + randomNum;
notificationManager.notify(notificationID, notificationBuilder.build());