将 Picasso 与 Image Getter 结合使用

2023-11-22

我正在构建一个聊天应用程序,并尝试将图像附加到 EditText,通过使用 Picasso 从 URL 获取图像,并使用附加和 ImageGetter 将图像附加到 EditText。但是,我在下面实现的内容不起作用,因为使用应用程序时附加消息不会显示任何内容(但该消息确实显示在数据库中)。

我已经在不使用 Picasso 的情况下进行了测试,因为只需将 ImageGetter 与应用程序中的图像资源一起使用即可正常工作,只是它不是根据需要来自 URL。

配置 ImageGetter 和/或附加方法以便此功能适用于 Picasso 的正确方法是什么?或者有更简单的方法吗?

追加方法:

public void appendToMessageHistory(final String username,
            final String message) {
        if (username != null && message != null) {

            Picasso.with(getBaseContext())
                    .load("http://localhost:3000/uploads/campaign/image/2/2.jpg")
                    .into(new Target() {

                        @Override
                        public void onPrepareLoad(Drawable arg0) {

                        }

                        @Override
                        public void onBitmapLoaded(Bitmap bitmap,
                                LoadedFrom arg1) {
                            Drawable drawImage = new BitmapDrawable(
                                    getBaseContext().getResources(), bitmap);

                            drawImage.setBounds(0, 0,
                                    drawImage.getIntrinsicHeight(),
                                    drawImage.getIntrinsicWidth());
                            messageHistoryText.append(Html.fromHtml("<b>"
                                    + username + ":" + "</b>" + "<br>"));
                            messageHistoryText.append(Html.fromHtml(message
                                    + "<hr>" + "<br>")
                                    + System.getProperty("line.separator") + "");

                            messageHistoryText.append(Html
                                    .fromHtml("<img src = '" + drawImage
                                            + "'/>",
                            imageGetter,
                            null));
                        }

                        @Override
                        public void onBitmapFailed(Drawable arg0) {

                        }
                    });

        }
    }

图像获取器:

ImageGetter imageGetter = new ImageGetter() {
        Drawable imageUsed=null;

        @Override
        public Drawable getDrawable(String source) {

            Picasso.with(getBaseContext())
                    .load("http://localhost:3000/uploads/campaign/image/2/2.jpg")
                    .into(new Target() {

                        @Override
                        public void onPrepareLoad(Drawable arg0) {

                        }

                        @Override
                        public void onBitmapLoaded(Bitmap bitmap,
                                LoadedFrom arg1) {
                            Drawable drawImage = new BitmapDrawable(
                                    getBaseContext().getResources(), bitmap);

                            drawImage.setBounds(0, 0,
                                    drawImage.getIntrinsicHeight(),
                                    drawImage.getIntrinsicWidth());

                            imageUsed=drawImage;

                        }

                        @Override
                        public void onBitmapFailed(Drawable arg0) {

                        }
                    });

            return imageUsed;
        }

    };

我无法让它与毕加索的目标一起工作......

我的解决方法是:

  • 使用 AsyncTask 实现并发
  • 使用Picasso的get()方法加载图像同步地在AsyncTask的后台方法中

像这样:

public class PicassoImageGetter implements Html.ImageGetter {

final Resources resources;

final Picasso pablo;

final TextView textView;

public PicassoImageGetter(final TextView textView, final Resources resources, final Picasso pablo) {
    this.textView  = textView;
    this.resources = resources;
    this.pablo     = pablo;
}

@Override public Drawable getDrawable(final String source) {
    final BitmapDrawablePlaceHolder result = new BitmapDrawablePlaceHolder();

    new AsyncTask<Void, Void, Bitmap>() {

        @Override
        protected Bitmap doInBackground(final Void... meh) {
            try {
                return pablo.load(source).get();
            } catch (Exception e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(final Bitmap bitmap) {
            try {
                final BitmapDrawable drawable = new BitmapDrawable(resources, bitmap);

                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

                result.setDrawable(drawable);
                result.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

                textView.setText(textView.getText()); // invalidate() doesn't work correctly...
            } catch (Exception e) {
                /* nom nom nom*/
            }
        }

    }.execute((Void) null);

    return result;
}

static class BitmapDrawablePlaceHolder extends BitmapDrawable {

    protected Drawable drawable;

    @Override
    public void draw(final Canvas canvas) {
        if (drawable != null) {
            drawable.draw(canvas);
        }
    }

    public void setDrawable(Drawable drawable) {
        this.drawable = drawable;
    }

}

希望这有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Picasso 与 Image Getter 结合使用 的相关文章

  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • AdapterContextMenuInfo 始终为 null

    我尝试通过 android 开发文档中的书来做到这一点 this didn t create a menu i don t know why registerForContextMenu getListView setListAdapter
  • 如何正确释放Android MediaPlayer

    我正在尝试向我的 Android 应用程序添加一个按钮 当点击该按钮时它会播放 MP3 我已经让它工作了 但没有办法释放 mediaPlayer 对象 因此即使在我离开活动后它仍然会继续播放 如果我在react 方法之外初始化MediaPl
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • 当它的父级是 ConstraintLayout 时设计 CardView 吗?

    我在编辑包含Relativelayout的Cardview内的RelativeLayout时搞砸了 ConstraintLayout会将相对布局的wrap content更改为0并添加工具 layout editor absoluteX 1
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 动态img(或视频)标签根本不加载资源,HTTP请求处于“待处理”状态

    我尝试使用以下方法在 Web 应用程序上加载资源时遇到一些问题img or videoHTML 标签 我在我的应用程序中使用 Angular 并动态设置src的参数img标签 使用ng src src 指示 没有那么多图像和资源需要加载 在
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • Android 后台倒计时器

    我有一个 Android 应用程序 它管理一个倒计时器 类 CountDownTimer 它显示在应用程序屏幕中 以显示到达 00 00 还剩多少时间 我现在的问题是 当我按主页按钮或启动另一个应用程序时 应用程序 计时器不会在后台运行 所

随机推荐

  • 警告:未知转义序列:'\040' [默认启用]

    我正在用 C 语言编写一个简单的应用程序 我想在 BSD 许可证下发布它 应用程序的一部分负责向用户打印有关程序的信息 但是 我在打印许可证文本时遇到问题 这是例子 include
  • 为什么并发字典没有可见的 Add() 方法?

    我只是想知道 ConcurrentDictionary 怎么可能没有 Visual Studio IDE 中可见的 Add 方法 我似乎只得到 TryX 方法 例如 TryAdd TryUpdate 等 我可以看到ConcurrentDic
  • 如何在两个以上的UIView之间做翻转动画?

    我在扩展 UIView 的类中有动画代码 Start Animation Block CGContextRef context UIGraphicsGetCurrentContext UIView beginAnimations nil c
  • Spring+Hibernate 中的@Transactional

    我正在使用春季 3 1 休眠 4 x在我的网络应用程序中 在我的 DAO 中 我保存用户类型对象如下 sessionFactory getCurrentSession save user 但出现以下异常 org hibernate Hibe
  • 向 CGPoint 类型参数发送 nil

    假设我有这个方法 void placeView UIView theView withCenterIn CGPoint centerPoint 所以我传递了视图和一个指向视图中心的点 但碰巧我不需要指定中心 只需要指定视图 传递 nil 会
  • 需要一个正则表达式工具来根据所选文本建议表达式[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我发现了一些在线工具 可以让我查看我在示例文本上创建的正则表达式的效果 但我正在寻找一种可以根据所选文本的一部分提出表达式建议的工具 例如 假设我有
  • 该IP、站点或移动应用程序无权使用该IP授权的API密钥

    我正在使用 Google Places API 它要求您提供允许使用该服务的 IP 列表 该 API 在我的本地计算机上运行良好 但它给出了 该IP 网站或移动应用程序无权使用该API 钥匙 当我从生产服务器使用它时 我已经添加了所需的 I
  • 具有相同签名的两个方法的互斥约束

    所以这两个方法具有相同的签名但不同的约束 public static void Method
  • 有开放的 iCalender API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有任何 API 可供我使用并将事件数据发布到 例如使用查询字符串 并取回访问者可以下载并添加到其日历中的文件 我当然可以自己编写脚本 但如果有开
  • 程序化短信[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 以编程方式发送短信的最佳方式是什么 是否有基于免费 Web 服务的 SMS 网关 我知道如果我碰巧知道用户的运营商 Sprint AT T 等 我可以发送通过电子邮件地址发送短信
  • Android 中的 RxJava 异步任务

    我正在尝试在 Android 中使用 RxJava 实现异步任务 我尝试了以下代码 但没有成功 它在 UI 线程上执行 我正在使用以下版本的 RxAndroid 0 24 0 try Observable just someMethodWh
  • 在 SQL 中选择具有多个 GROUP 的表中 TOP 2 值的 SUM

    我一直在 SQL Server 2000 中使用集合 并且我的临时表之一 Periods 具有以下表结构 RestCTR HoursCTR Duration Rest 1 337 2 0 2 337 46 1 3 337 2 0 4 337
  • 地址栏中的 JavaScript - 这是恶意的吗?

    我在 Facebook 上收到一条消息 要求我将其复制并粘贴到我的地址栏中 我想我应该把它发布在这里 看看大家对此有何看法 它有什么作用 它是如何工作的 这是源代码 DO NOT DO THIS Javascript var a x69 x
  • 序列化异步有很多关系

    我对 EmberJS 相当陌生 我整个晚上都在摆弄 试图在我正在开发的新应用程序中保留一些 hasMany 和多对多关系 我正在使用 Ember DataActiveModelAdapter将其连接到我正在使用的 Rails 后端Activ
  • Angular JS,“nomod”,模块“{0}”不可用!你要么拼写错误

    这是我的index html中的代码
  • 出生日期验证不断显示

    我正在输入一个DOB 22 12 1986进入我的文本框 验证不断触发 它说 The field DOB must be a date My MODEL System ComponentModel DisplayName DOB Displ
  • 如何加密 cookie 值?

    如何在 PHP 中加密并随后解密 cookie 值 加密的安全性如何 有多种不同的方法可以对 cookie 和其他地方的信息进行加密 加密强度将根据您选择进行实际加密的方法而有所不同 mycrypt是一个很好的起点 看这个答案有关使用 mc
  • 在 gRPC 客户端服务器通信中使用 SSL

    我对 SSL TLS 一无所知 并且正在尝试按照网上找到的说明在 gRPC 中使用 SSL TLS 通道 这是服务器代码 std string server address 0 0 0 0 50051 GreeterServiceImpl
  • jpa hibernate @OneToOne @JoinColumn referencedColumnName 被忽略

    我在对与另一个具有一对一关系的实体执行 jpql 查询时遇到意外行为 关键点在于 关系是从根实体的主键到目标实体的字段 不是 ID 这是示例 root entity Entity Table name PERSON public class
  • 将 Picasso 与 Image Getter 结合使用

    我正在构建一个聊天应用程序 并尝试将图像附加到 EditText 通过使用 Picasso 从 URL 获取图像 并使用附加和 ImageGetter 将图像附加到 EditText 但是 我在下面实现的内容不起作用 因为使用应用程序时附加