Java Android-位图空对象引用

Java Android-位图空对象引用,java,android,picasso,Java,Android,Picasso,在我的应用程序中,我使用毕加索下载图像并将其转换为字节数组。我在下面调用此方法来下载图像并将其转换为字节数组 private byte[] convertToByte(String url) { Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img); Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();

在我的应用程序中,我使用毕加索下载图像并将其转换为字节数组。我在下面调用此方法来下载图像并将其转换为字节数组

   private byte[] convertToByte(String url) {

    Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img);
    Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byteArray= stream.toByteArray();

    Toast.makeText(getApplicationContext(),"Downloaded Successfully",Toast.LENGTH_LONG).show();

    return byteArray;
}
我的问题是我遇到了这样的错误。
日志

   private byte[] convertToByte(String url) {

    Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img);
    Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byteArray= stream.toByteArray();

    Toast.makeText(getApplicationContext(),"Downloaded Successfully",Toast.LENGTH_LONG).show();

    return byteArray;
}
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference

谁能帮我解决这个问题。

你不需要一个
ImageView
来下载图像并获取其字节数组。使用毕加索,您可以注册一个在下载完成时调用的回调

   private byte[] convertToByte(String url) {

    Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img);
    Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byteArray= stream.toByteArray();

    Toast.makeText(getApplicationContext(),"Downloaded Successfully",Toast.LENGTH_LONG).show();

    return byteArray;
}
private Target target = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
    }
}
使用此回调,您可以异步下载图像:

   private byte[] convertToByte(String url) {

    Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img);
    Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byteArray= stream.toByteArray();

    Toast.makeText(getApplicationContext(),"Downloaded Successfully",Toast.LENGTH_LONG).show();

    return byteArray;
}
Picasso.with(context).load(url).into(target);
此外,要将位图转换为字节数组,可以先压缩位图,然后将其保存到输出流中:

   private byte[] convertToByte(String url) {

    Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img);
    Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byteArray= stream.toByteArray();

    Toast.makeText(getApplicationContext(),"Downloaded Successfully",Toast.LENGTH_LONG).show();

    return byteArray;
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

如果不想压缩,可以使用
Bitmap.copyPixelsToBuffer
方法。

毕加索操作的可能副本是异步的。当您试图在下一行中检索图像时,图像将不会加载到
ImageView
。@MikeM。任何代码片段都可以。我不使用毕加索,但它看起来像
into()
非常灵活。我可能会执行如中所示的操作,并在
onBitmapLoaded()
方法中获取所需的
位图
。@Rajkumar我很高兴这能帮助您。如果你的问题解决了,请考虑我的答案。不仅仅是这篇文章,你所有的文章。请接受您的问题的最佳答案。这就是堆栈溢出用户应该做的事情。
   private byte[] convertToByte(String url) {

    Picasso.with(list_my_posts.this).load(url).fit().centerCrop().into(img);
    Bitmap bitmap=((BitmapDrawable)img.getDrawable()).getBitmap();
    ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byteArray= stream.toByteArray();

    Toast.makeText(getApplicationContext(),"Downloaded Successfully",Toast.LENGTH_LONG).show();

    return byteArray;
}