2017-10-15 15 views
0

私のアプリケーションでは、picassoを使用してイメージをダウンロードし、このイメージをバイト配列に変換しています。このメソッドを呼び出してイメージをバイト配列にダウンロードして変換します。Android - Bitmap Nullオブジェクトリファレンス

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 

誰もがこの問題を解決するために私を助けることができます。

+0

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – user1506104

+0

ピカソ操作は非同期です。イメージは、次の行で取得しようとするまでに 'ImageView'に読み込まれません。 –

+0

@MikeM。任意のコードスニペットしてください。 –

答えて

1

ImageViewは、画像をダウンロードしてバイト配列を取得する場合にのみ必要です。ピカソを使用すると、ダウンロードが完了したときに呼び出されるコールバックを登録できます。

このコールバックを使用して
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) { 
    } 
} 

、あなたが非同期的に画像をダウンロードすることができます

Picasso.with(context).load(url).into(target); 

また、バイト配列にビットマップを変換するために、あなたが最初のビットマップを圧縮して、出力ストリームにそれを保存することができます。

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

圧縮しない場合は、Bitmap.copyPixelsToBufferメソッドを使用できます。

+0

@Frogattoありがとうございました。 –

+0

@Rajkumar私はあなたを助けることができてうれしいです。問題が解決した場合は、[_accepting_](https://stackoverflow.com/help/someone-answers)の回答を検討してください。この投稿のためだけでなく、あなたの投稿のすべて。あなたの質問に最善の答えをしてください。 Stack Overflowのユーザーがそうする方法です。 –

関連する問題