【问题标题】:Use Picasso to Place Image Into Drawable使用 Picasso 将图像放入 Drawable
【发布时间】:2015-09-20 18:59:15
【问题描述】:

我正在尝试使用 Square 的 Picasso 从 URL 中提取 jpg,然后附加到 EditText。 Picasso 的原因是它在实现上非常轻量级。可以看出我正在使用占位符 ImageView,Picasso 将从提供的 URL 导入图像,然后我将该 ImageView 转换为 Drawable。 ImageGetter 也是如此。但是,在使用下面的配置时,我收到空指针错误。 (请注意,当简单地使用应用程序资源中的可绘制对象代替下面的“drawImage”变量时,此配置有效,但我正在尝试扩展它以从 URL 中提取资源)。

这里有什么不合适的吗?还是更有效的方法?

追加到EditText的方法:

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

            ImageView image = new ImageView(getApplicationContext());

            Picasso.with(getBaseContext()).load("http://localhost:3000/uploads/campaign/image/2/2.jpg").into(image);
            Drawable drawImage = image.getDrawable();

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

        }
    }

ImageGetter:

ImageGetter imageGetter = new ImageGetter() {

@Override
public Drawable getDrawable(String source) {
    ImageView image = new ImageView(getApplicationContext());

    Picasso.with(getBaseContext()).load("http://localhost:3000/uploads/campaign/image/2/2.jpg").into(image);
    Drawable drawImage = image.getDrawable();

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


}

};

【问题讨论】:

  • 发布 logcat 错误..

标签: android nullpointerexception picasso


【解决方案1】:

你想念毕加索的一些东西。您可以在 inTo 方法中设置匿名 Target 类,并将位图设置为您拥有的任何对象:

Picasso.with(getBaseContext()).load("your url").into(new Target() {

                @Override
                public void onPrepareLoad(Drawable arg0) {


                }

                @Override
                public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
                    // TODO Create your drawable from bitmap and append where you like.

                }

                @Override
                public void onBitmapFailed(Drawable arg0) {


                }
            });

编辑 所以你就是这样做的:

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

            ImageView image = new ImageView(getApplicationContext());

            Picasso.with(getBaseContext()).load("image url").into(new Target() {

                    @Override
                    public void onPrepareLoad(Drawable arg0) {


                    }

                    @Override
                    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
                    Drawable drawImage = new BitmapDrawable(getBaseContext().getResources(),bitmap);
                     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) {


                    }
                });




        }
    }

【讨论】:

  • 您如何使用此处列出的方法?类结构对我来说没有意义......
  • 只需填写 onBitmapLoaded 方法并在其中创建 BitmapDrawable。然后像以前一样附加到您的 textEdit。您不需要实现那里列出的所有方法。但它们都是不言自明的...... onPrepareLoad 在加载开始之前运行并且有一个 Drawable 参数(这是你的 placeHolder 图像)
  • 你能介绍一下怎么做吗?
  • 这不起作用,它指出:“方法 BitmapDrawable(Resources, Bitmap) 未定义类型 new Target(){}”还有其他方法吗?在行 BitmapDrawable(getBaseContext().getResources,bitmap);
  • 你能发布完整的错误日志吗?它没有任何意义。您不必使用 imageGetter 方法,因为您已经有了位图。您确定您使用的是正确的“目标”(import com.squareup.picasso.Target)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多