Com.octo.android.robospiceを正しく使用してビットマップをキャッシュする方法
質問
ここで見つかった例を使っています: https://github.com/octo-online/robospice/wiki/starter-guide.
とキャッシングでビットマップ要求をサポートするために拡張しようとしました。 LOGCATを冗長に設定すると、ビットマップがキャッシュに正常に行われていることを示すログメッセージが表示されますが、次のログメッセージで後続の呼び出しのキャッシュからビットマップを読み返すことを試みます。
11-15 09:14:02.694:d // requestRunner.java:102(5462):com.octo.android.robospice.persistence.excepion.cacheloadingException:org.codehaus.jackson.map.jsonMappingException :タイプのための適切なコンストラクタは見つかりません[Simple Type、Class Android.Graphics.bitMap]:JSONオブジェクトからインスタンス化できません(タイプ情報を追加/有効にする必要がありますか?)
JSonspiceFactoryからの関連コード:
@Override
public CacheManager createCacheManager(Application application) {
CacheManager cacheManager = new CacheManager();
try {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
JacksonObjectPersisterFactory jacksonObjectPersisterFactory = new JacksonObjectPersisterFactory(application);
cacheManager.addPersister( jacksonObjectPersisterFactory );
// Try to add support for bitmap caching here
InFileBitmapObjectPersister filePersister = new InFileBitmapObjectPersister(application);
LruCacheBitmapObjectPersister memoryPersister = new LruCacheBitmapObjectPersister(filePersister, cacheSize);
cacheManager.addPersister(memoryPersister);
} catch (CacheCreationException e) {
e.printStackTrace();
}
return cacheManager;
}
.
そしてここでは、CacheまたはNetworkからイメージをロードするためのSpiceManager呼び出しを呼び出すコード:
public void getNetworkBitmap(String url, String cacheKey, GetBitmapListener listener) {
GetMerchantLogoRequest request = new GetMerchantLogoRequest(url);
spiceManager.execute(request, cacheKey, DurationInMillis.ONE_HOUR, new NetworkBitmapRequestListener(listener));
}
private class NetworkBitmapRequestListener implements RequestListener<Bitmap> {
private GetBitmapListener listener;
public NetworkBitmapRequestListener(GetBitmapListener listener) {
this.listener = listener;
}
@Override
public void onRequestFailure(SpiceException spiceException) {
listener.onImageRequestFailure(spiceException);
}
@Override
public void onRequestSuccess(Bitmap logo) {
listener.onImageRequestSuccess(logo);
}
}
.
キャッシュデータからビットマップを再構成する工場が必要ですか?これはJSONオブジェクトではないので、ジャクソンのJSONマッピングを使用する試みを修正するために何をする必要がありますか?私が追加/有効型の場合、ジャクソンは正しいことをしますか?どうすればいいですか?
これを読んでくれてありがとう!
-
解決
CacheManager(下のリンク)を介した回答の読みを見つけて、「All Elements [Persisters] ...は順番に疑問符述されています」という行の上につまずいたことがあるため、CreateCacheManagerメソッドのエントリを順次ご注文しています。
他のヒント
BitMapRequestを使用することができますが、これは例です。