簡體   English   中英

Android-進度欄未更新

[英]Android - Progress Bar not updating

我有一個線程可以從txt文件中提取數據后將數據更新到SQLite DB中,我想顯示一個對話框,其進度將相應地更新。

以下代碼正確運行,即使runOnUiThread也適用於關閉,但是Progress尚未更新。

Thread thread = new Thread(){
                @Override
                public void run() {
                    Log.d("THREAD", "in run");
                    // TODO Auto-generated method stub
                    try {

                        Log.d("DATABASE", "Creating Database");
                        SQLiteDatabase db = openOrCreateDatabase("WordDatabase", MODE_PRIVATE, null);

                        Log.d("DATABASE", "Checking table exist");
                        Cursor tableName =  db.rawQuery("SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name='Words'",null);

                        if(tableName.getCount() < 1){
                            Log.d("DATABASE", "Creating Table");
                            db.execSQL("CREATE TABLE IF NOT EXISTS Words (Word TEXT);");

                            ContentValues cv = new ContentValues();

                            float totalWords = 5000;// 144895;
                            float wordsSelected = 0;
                            Log.d("CONTENT", "Entering Values");
                                Scanner scanner = new Scanner(getApplicationContext().getAssets().open("english.txt"));
                                while(scanner.hasNext()){
                                    int i=0;
                                    while(scanner.hasNext() && i<500 ){
                                        cv.put("Word", scanner.next());
                                        db.insert("Words", null, cv);
                                        i++;
                                        wordsSelected++;
                                        final float percent = (wordsSelected/totalWords)*100;
                                        Log.d("PROGRESS", Float.toString((int)percent));
                                        runOnUiThread(new Runnable() {

                                            @Override
                                            public void run() {
                                                dialog.setProgress((int) percent);
                                                if(percent == 100) dialog.dismiss();
                                            }
                                        });

                                    }
                                    cv.clear();
                                    Log.d("CONTENT", "inserting");
                                }
                                Log.d("CONTENT", "Completed");
                        }
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }
            };
            thread.start();

runOnUiThread在這里不起作用,您應該使用Handler 這是在您定義thread時使用的方法。

final Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        int percent = msg.what;
        dialog.setProgress((int) percent);
        if (percent == 100) dialog.dismiss();
    }
};

現在,您可以從thread中調用handler

// ...
final float percent = (wordsSelected/totalWords) * 100;
Log.d("PROGRESS", Float.toString((int) percent));
handler.sendEmptyMessage((int) percent));
// ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM