2017-02-03 2 views
0

내 데이터베이스에서 이미지를로드해야합니다. 안드로이드처럼 이미지를 BLOB에 저장합니다. 각 이미지는 내 복장 URI로 표시됩니다. Glide으로 어떻게 해결할 수 있습니까?글라이드 의상 URI 스키마

글라이드 캐시와 빠른 로딩의 혜택을보고 싶습니다.

올바른 방법이 있습니까?

+0

:

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

당신이 데이터베이스 이미지를로드 할 수 있습니다 패스를 데이터베이스로 가져온 다음 글라이드를 사용하여 경로 및로드를 사용하여 이미지를 간단히 검색 할 수 있습니다. –

+0

@RajeshPanchal 이미지가 저장되는 방식을 변경하지 않고 Glide와 통합하기 만하면됩니다. –

답변

0

Glide.get (context) .register() 메소드를 호출하여 ModelLoader 클래스을 글라이드에 등록 할 수 있습니다. ModelLoader에서 getResourceFetcher 메소드를 구현하고 데이터베이스 사용자 정의 DataFetcher 인스턴스를 리턴하여 데이터베이스에서 이미지 자원을로드하는 방법을 Glide에 알릴 수 있습니다.

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(){ 

    } 

} 
} 

한 다음 미군 병사에 ModelLoader를 추가 호출하여 IDE 레지스트리 대신 당신은 장치와 저장소의 내부/외부 저장소에 저장하지 않는 이유 데이터베이스에 BLOB에 이미지를 저장

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

코드 예제를 보여 주시겠습니까 –

+0

죄송합니다. 새로운 레지스트리 클래스가 최신 릴리스 버전 인 v3.7.0에 포함되어 있지 않은 것을 보지 못했습니다. 예를 들어 답을 편집했습니다. – 7heaven

관련 문제