2016-08-15 15 views
0

Retrofitライブラリを使用してサーバーから画像をダウンロードしようとしています。サーバーは、イメージのバイト配列を返し、BitmapFactory.decodeByteArray(..)を使用してビットマップに変換します。私は自分のアプリケーションがクラッシュし、canvas.drawBitmap(..)を呼び出し、メッセージはstackoverflowの上で検索した後LogCatURLから画像をダウンロードしてキャンバスに描画する - Android

Fatal signal 11 (SIGSEGV), code 1, fault addr 0x188 android

に表示されている以下のときしかし、私はfalseandroid:hardwareAcceleratedを設定した答えに出くわしました。私はやっただけでなく、私のアプリが遅くなって遅く、画像はまだキャンバスに描画されていませんでした。私はとtop座標がcanvas.drawBitmap(....)で渡されたことが正しいことを知っています。これは、mipmapから読み込まれた画像を表示できるためです。

私はいくつかの時点でこの問題に固執しており、これに適した解決策を見つけることができないので、これについての助けに感謝します。

EDIT

LogCatクラッシュ

時の
      ----Beginning of crash 
A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x188 in tid 22133 
W/System: ClassLoader referenced unknown path: /data/app/com.i2c.bb4me-2/lib/x86_64 
I/MultiDex: VM with version 2.1.0 has multidex support 
I/MultiDex: install 
I/MultiDex: VM has multidex support, MultiDex support library is disabled. 
I/GMPM: App measurement is starting up, version: 8487 
I/GMPM: To enable debug logging run: adb shell setprop log.tag.GMPM VERBOSE 
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead. 
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 

を画像を取得して描画するために呼び出されるメソッド私は左とそのトップ計算した後onDraw()でこのメソッドを呼び出しています上記のように正しいです。

private void getBitmap(final Canvas canvas, long imageID, final float left, final float top, final Paint paint) { 
     ProfileService profileServiceRetrieveImage = AppManager.getServiceManager().getService(ProfileService.class); 
     Call<ServerResponse<FetchProfileImageResponse>> call = profileServiceRetrieveImage.fetchProfileImage("retrieveImage.action", "", imageID); 
     call.enqueue(new RetrofitCallback<ServerResponse<FetchProfileImageResponse>>() { 
      @Override 
      protected void onSuccess(ServerResponse<FetchProfileImageResponse> objectServerResponse) { 
       FetchProfileImageResponse dao = objectServerResponse.getResponsePayload(); 
       Bitmap bmp = BitmapFactory.decodeByteArray(dao.getBinaryData(), 0, dao.getBinaryData().length); 
       canvas.drawBitmap(bmp, left, top, paint); 
      } 
     }); 
    } 
+1

ピカソまたはグライドで試しましたか?彼らはイメージのための非常に良いライブラリです。 –

+0

はい、私はそれらのライブラリについて知っています。しかし、私はそれらを使用することはできません。私の職場で行われたアーキテクチャは、それらを使用することを許可していません –

+0

あなたはshure decodeByteArrayはnullを返しませんか?あなたのアプリがクラッシュすると、LogCatにエラー/例外が記述されます。投稿してください。何かが1行になります。 – greenapps

答えて

0

誰かが私のようにこの問題に固執している場合に備えてソリューションを投稿してください。

まず、onSuccesscanvas.drawBitmap(....)に電話をかけないでください。 onSuccessから取得したビットマップをクラスに保存するだけで、invalidate()と電話してcanvas.drawBitmap(...)onDraw()