【问题标题】:Android - how to load image without storing / caching with picassoAndroid - 如何在不使用毕加索存储/缓存的情况下加载图像
【发布时间】:2018-05-08 18:30:12
【问题描述】:

我使用 firebase api 发送通知。我处理标题和图像 URL 键。

我使用图像 url 键将带有毕加索的图像加载到 imageview 中。 我的问题是“我发送了一个通知,但我没有点击它,在第一个通知之后我发送了第二个带有不同图片 URL 的通知。我点击了第二个通知。应用程序启动,我在第一个地址的 imageview 中看到了图片。

我的意思是第一个通知图片网址是:www.....com/11.jpg 第二个图片网址是:www.....com/22.jpg

所以,当我点击最后一个通知时,我应该看到 www.....com/22.jpg 而不是 www.....com/11.jpg 。

意图意图 = 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*/);

}

这是我的metot。

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

【问题讨论】:

  • 添加通知意图代码和实际调用毕加索的代码
  • 这不是Picasso的问题,如果在你没有点击第一个通知后它获取了错误的url,那是通知接收的问题
  • @ViktorYakunin 我添加了我的代码。

标签: android picasso


【解决方案1】:

尝试使用NO_STORE 策略:

Picasso.with(this).load(url)
                 .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
                .networkPolicy(NetworkPolicy.NO_CACHE)
                .into(imageView);

NO_CACHE

处理请求时跳过内存缓存查找。

NO_STORE

跳过将最终结果存储到内存缓存中。一次性有用 请求避免从缓存中清除其他位图。

更新

您必须为通知使用不同的 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());

【讨论】:

  • 我尝试了您的代码,但没有成功。它仍然显示图像的第一个 url。我添加了更多代码
  • 很好的答案!!!谢谢。我是新手,我没有考虑过。真的感谢我的朋友。
  • 没问题,很高兴为您提供帮助
猜你喜欢
  • 2015-07-17
  • 2015-10-16
  • 2014-04-10
  • 1970-01-01
  • 2021-02-21
  • 2015-08-24
  • 2014-11-13
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多