2013-08-24 91 views
0

我有一個線程在從txt文件獲取數據後將數據更新到SQLite數據庫中,我想顯示一個對話框,其進度相應地更新。Android - Progress Bar not updating

以下代碼可以正常工作,即使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(); 
+0

是否要更新的任何一個列表?如果是的話,你需要使用'notifyDatasetChanged()' –

+0

@LittleChild你的意思是什麼?我從txt文件中獲取一些文本,然後在數據庫中發送該文本。 UI上沒有列表。 – mdanishs

+0

'logcat'是否正常顯示進度? –

回答

1

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)); 
// ... 
+1

這並不奏效,它會隨着日誌顯示進入句柄,但進度條不會繼續 – mdanishs