2011-04-19 49 views
0

我有這樣的代碼就是一個例子,我發現和IM新還在學習Android的,所以請我需要一些幫助,知道如何在這個碼錶的讀數的Android源碼延遲

例如添加延遲我插入2行,然後讀取它們....我想要做的是讀取第一行並等待5秒,例如然後讀取第二行並等待五秒..... ????

這是代碼:

package net.learn2develop.Database; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.widget.Toast; 

public class DatabaseActivity extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     DBAdapter db = new DBAdapter(this); 

     //---add 2 titles--- 
     db.open();   
     long id; 
     id = db.insertTitle(
       "0470285818", 
       "java ++ :)", 
       "someone");   
     id = db.insertTitle(
       "047017661X", 
       "Professional Programming", 
       "someone2"); 
     db.close(); 

     //---get all titles--- 
     db.open(); 
     Cursor c = db.getAllTitles(); 
     if (c.moveToFirst()) 
     { 
      do {   
       DisplayTitle(c); 
      } while (c.moveToNext()); 
     } 
     db.close(); 

    } 

    public void DisplayTitle(Cursor c) 
    { 
     Toast.makeText(this, 
       "id: " + c.getString(0) + "\n" + 
       "ISBN: " + c.getString(1) + "\n" + 
       "TITLE: " + c.getString(2) + "\n" + 
       "PUBLISHER: " + c.getString(3), 
       Toast.LENGTH_LONG).show();   
    } 

} 
+0

出於好奇,爲什麼你要這麼做? – pecka85 2011-04-19 20:17:35

回答

0

正確的方法 - 它不會阻止你的主線程,所以UI響應停留:

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
public void run() { 
    // Get new entry 
}, 5000); // 5000 miliseconds 
+0

儘管可運行執行確實會阻塞您創建處理程序的線程(通常是主線程),並在該循環程序中執行您的可運行代碼。 – milosmns 2017-02-06 16:53:21

1

你不應該把任何長期運行的功能,在主線程。 onCreate必須始終快速執行然後返回,否則它們可能會被android OS作爲ANR(應用程序未響應)而被殺死。

考慮使用TimerTask,讓您的查詢獲得第n條記錄,每次遞增n。請注意,TimerTask將在線程中運行您的方法,並且您只能從主線程進行UI調用。使用Activty.runOnUiThread()來解決這個問題。