Com.octo.android.robospiceを正しく使用してビットマップをキャッシュする方法

StackOverflow https://stackoverflow.com//questions/20007452

質問

ここで見つかった例を使っています: 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メソッドのエントリを順次ご注文しています。

http://grepcode.com/file/repo1.maven.org/maven2/com.octo.android.robospice/robospice-cache/1.3.1 / com/octo/Android / Robospice / Persistence / CacheManager.java

他のヒント

BitMapRequestを使用することができますが、これは例です。

https://github.com/octo-online/robospice/blob/release/robospice-core-parent/robospice-core-test/src/メイン/ Java / COM / OCTO / Android / Robospice / Request / BitmapRequestTest.java?source= cc

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top