2017-09-27 1 views
0

내가 BLOB으로 저장된 내 SQLite 데이터베이스에서 이미지를 받고이 같은 SimpleCursorAdapter와 어댑터에 커서를 설정하고있어이 :안드로이드 - SimpleCursorAdapter 느린 이미지 로딩

public class FragmentAdapter3 extends Fragment { 
ArrayList<Sudentdb> list; 
GridView gridView; 

final String[] from = new String[]{SQLiteHelper._ID, 
     SQLiteHelper.NAME, SQLiteHelper.AGE, "imagepath"}; 

final int[] to = new int[]{R.id.rowid, R.id.txtName, R.id.txtAge, R.id.img}; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragment_main_adapter3, null); 
    gridView = (GridView) v.findViewById(R.id.gridView); 
    empty = (TextView) v.findViewById(R.id.esc); 

    final DBManager dbManager = new DBManager(getActivity()); 
    dbManager.open(); 

    final Cursor cursor = dbManager.fetch(); 

    list = new ArrayList<>(); 

    gridView.setAdapter(new SimpleCursorAdapter(getActivity(), R.layout.single_item, cursor, from, to, 0));  

    return v; 
} 

이 잘 작동하고 난 모든 텍스트와 이미지를 SQLite에서 다시 가져 오는 문제는 이미지가 매우 느리게로드되고 이로 인해 활동 사이에서 전환 할 때 '지연'되는 원인이된다는 것입니다.

내 질문에, 활동 사이를 전환 할 때 지연 /로드 문제가 발생하지 않고 SimpleCursorAdapter를 사용하여 SQLite 데이터베이스의 이미지를로드하는 방법은 무엇입니까?


편집 : 나는 나를 위해 이미지의 캐시를 처리 할 수 ​​Piccaso, UniversalImageLoader 또는 발리 등의 라이브러리를 사용할 수 있습니다 알고 있지만, 나는이 String[] 그것을 구현하는 것이 방법을 모르는

위와 같습니다.


편집 2 :

지금 저장하고 의견을 제안처럼 이미지의 경로를 받고,하지만 같은 문제가 발생하고있다. 로그에서 어떤 일이 일어나고있는 유일한 방법은 다음과 같습니다

Skipped 43 frames! The application may be doing too much work on its main thread.

이 그것도 파일 경로를 저장에 저장 BLOB를 변경 한 후,이 문제를 일으키는 이미지의로드 나에게 나타냅니다.

+0

큰 이미지를 저장하기 위해 BLOBS를 사용하지 마십시오. 대신 일반 파일을 사용하고 sqlite db에 경로를 저장하십시오. – pskink

+0

이미지 경로 대신 데이터베이스에 이미지를 저장해야하는 이유는 무엇입니까? – Aks4125

+0

@pskink edit2 참조하십시오. – ClassA

답변

1

문자열 경로로 vachar로 피카소와 글라이드 라이브러리 및 데이터베이스 저장소의 이미지를 시도하고 비트 맵을 사용하여 안드로이드 사이드를 호출하므로 애플리케이션하지 않습니다 "지연"때 활동

사이를 전환 피카소

Picasso.with(mContext).load(imageFile).priority(Picasso.Priority.HIGH).resize(width, height).into(image); 

글라이드

Glide.with(mContext).load(imageFile).override(width, height).into(image); 

이 같은 PNG 또는 JPEG로 이미지를 변환 할 수 있습니다

try { 
    FileOutputStream out = new FileOutputStream(filename); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); //100-best quality 
    out.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

제 편집을 참조하십시오. – ClassA

+0

하지만 주요 문제는 데이터베이스에서 bloob을 사용하고 있다는 것입니다. 그래서 ur 응용 프로그램은 "지연" –

+0

edit2를 참조하십시오, 나는 그것을/BLOB 대신 파일 경로를 저장하도록 변경했습니다. – ClassA