2017-02-03 4 views
0

私のデータベースからイメージをロードする必要があり、アンドロイドのようにブロブに格納します。各画像は私のコスチュームURIで表されます。どうすればGlideで解決できますか?グライドコスチュームURIスキーム

グライドキャッシュと高速読み込みの恩恵を受けたいと思います。

これを行う適切な方法はありますか?

+0

の代わりに、あなたは、デバイスや店舗の内部/外部ストアに保管していない理由は、データベースにブロブ内の画像を保存するを呼び出すことによって、IDEレジストリそれらのイメージのデータベースへのパスを取得し、パスとロードを使用してグライドを使用してイメージを取得することができます。 –

+0

@RajeshPanchal画像を保存する方法を変更したくない、単にGlideと統合する。 –

答えて

0

ModelLoaderクラスをGlide.get(context).register()メソッドを呼び出して登録することができます。 ModelLoaderでは、getResourceFetcherメソッドを実装して、データベースからイメージ・リソースをロードする方法をGlideに伝え、customize DataFetcherインスタンスを戻すことができます。ここ

は例です:

DBImageUriクラス:

public class DBImageUri { 

private String uriString; 

public DBImageUri(String uriString){ 
    this.uriString = uriString; 
} 

@Override 
public String toString(){ 
    return uriString; 
} 
} 

DBDataFetcherクラス:

public class DBDataFetcher implements DataFetcher<InputStream> { 

private DBImageUri uri; 
private int width; 
private int height; 

private InputStream stream; 

public DBDataFetcher(DBImageUri uri, int width, int height){ 
    this.uri = uri; 
    this.width = width; 
    this.height = height; 
} 

@Override 
public InputStream loadData(Priority priority){ 
    String uriString = this.uri.toString(); 

    stream = //**load image based on uri, and return InputStream for this image. this is where you do the actual image from database loading process**; 

    return stream; 
} 

@Override 
public String getId(){ 
    //width & height should be ignored if you return same image resources for any resolution (return uri.toString();) 
    return uri.toString() + "_" + width + "_" + height; 
} 

@Override 
public void cleanup(){ 
    if (stream != null) { 
     try { 
      stream.close(); 
     } catch (IOException e) { 
      // Ignore 
     } 
    } 
} 

@Override 
public void cancel(){ 

} 
} 

DBModelLoaderクラス:

public class DBModelLoader implements ModelLoader<DBImageUri, InputStream> { 

@Override 
public DataFetcher<InputStream> getResourceFetcher(DBImageUri model, int width, int height){ 

    return new DBDataFetcher(model, width, height); 
} 

public static class Factory implements ModelLoaderFactory<DBImageUri, InputStream>{ 

    @Override 
    public ModelLoader<DBImageUri, InputStream> build(Context context, GenericLoaderFactory factories){ 
     return new DBModelLoader(); 
    } 

    @Override 
    public void teardown(){ 

    } 

} 
} 

、その後、あなたがGLにModelLoaderを追加します

Glide.get(context).register(DBImageUri.class, InputStream.class, new DBModelLoader.Factory()); 

今、あなたはあなたのデータベース画像をロードすることができます:

Glide.with(context).load(new DBImageUri(/*your unique id string for database image*/)).into(imageview); 
+0

コード例を表示できますか –

+0

申し訳ありません最新のリリースバージョンであるv3.7.0に新しいレジストリクラスが含まれていなかったことに気づかずに、私の回答を編集しました – 7heaven

関連する問題