나는 콜 로그에서 데이터를 수집하여 데이터베이스에 저장하고 ListView에 쿼리합니다. 500 회를 호출하면 약 8 초가 걸려서 나빠 보이므로 진행중인 대화 상자를 구현하여 사용자에게 얼마나 많은 항목이로드 될지 알려줍니다. 이제 3 개의 항목으로 시도하고 있습니다 (에뮬레이터의 콜 로그에는 3 개의 항목이 있습니다). progressdialog가 완료되면 listview에 3 개의 항목이 채워지지만 동일한 3 개의 항목이 반복되고 무한 반복됩니다.안드로이드 - listview와 함께 progressdialog 사용
테이블을 채우기 전에 테이블을 비 웁니다. 따라서 테이블에는 항상 세 개의 레코드가 있습니다.
무엇이 문제 일 수 있습니까?
pd = new ProgressDialog(Calllogs.this);
pd.setCancelable(true);
pd.setMessage("Loading...");
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setProgress(0);
pd.setMax(3);
pd.show();
//incrementProgressBy
new Thread(new Runnable() {
@Override
public void run() {
try
{
while(pd.getProgress()<=pd.getMax())
{
Thread.sleep(1000);
//collect data and populate database table
//query data and populate arrays
handler.sendMessage(handler.obtainMessage());
if(pd.getProgress()==pd.getMax())
{
pd.dismiss();
adapter = new ListViewCustomAdapter(Calllogs.this, arr_calllog_name, arr_calllog_phone, arr_calllog_type,arr_calllog_duration, arr_calllog_date);
lv1.post(new Runnable() {
public void run() {
lv1.setAdapter(adapter);
}});
}
}
}catch(Exception e){}
}
}).start();
그리고 핸들러 :
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
pd.incrementProgressBy(1);
//pd.dismiss();
}
};
편집 : 나는 실수로 전체 테이블의 인구가 무한 루프가 될 것을 발견했다. 나는 sqlite 데이터베이스 브라우저를 사용하여 테이블을 확인했으며 처음에는 21 개 항목, 59 초 후 몇 초가 지나서 마침내 확장 및 강제 종료되었습니다.
해결 : 나는이 볼 수없는 믿을 수 없어
. 쓰레드는 인구와 함께 시작되었고 끝없는 반복을 보냈습니다. calllog 쿼리 이후와 데이터베이스 쿼리 전에 넣어야했습니다.
방향을 스크롤하거나 변경할 때 복제 된 항목이 나타나거나 그냥 상호 작용없이 계속 추가 될 수 있습니까? 그리고 고정 된 시간 간격 후에 또는 무한 루프처럼 발생합니까? – Hassan
실제로 'ProgressDialog'의 진행을 증가시켜 줍니까 (그래서 당신은 무한한'while' 루프에 들어 가지 않습니다)? – Luksprog