2012-03-16 68 views
0

我試圖顯示進度dilog同時插入3000條記錄到數據庫中,但我不知道在哪裏把它放在我的代碼
這是我的主要活動顯示進度對話框,同時插入記錄到數據庫中的Android

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


    private SQLiteAdapter mySQLiteAdapter; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.s1); 

     Button gas = (Button) findViewById(R.id.gas); 

     mySQLiteAdapter = new SQLiteAdapter(this); 
      mySQLiteAdapter.openToWrite(); 
      // mySQLiteAdapter.deleteAll(); 


      Cursor cur = mySQLiteAdapter.isempty(); 
      if (cur != null){ 
       cur.moveToFirst(); 
       if (cur.getInt(0) == 0) { 




        mySQLiteAdapter.insert("AUDI","A4","2001","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2002","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2003","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2004","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2005","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2006","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2007","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2008","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2009","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2010","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A4","2011","MUMTAZ"); 

        mySQLiteAdapter.insert("AUDI","A5","2001","MUMTAZ"); 
        mySQLiteAdapter.insert("AUDI","A5","2002","MUMTAZ"); 


// and other 3000 records 


} 
//close database 

,這是數據庫文件:

public class SQLiteAdapter { 

    // 
    // Databsae Related Constants 
    // 
    private static final String DATABASE_NAME = "car"; 
    private static final String DATABASE_TABLE = "options"; 
    private static final int DATABASE_VERSION = 1; 

    public static final String KEY_MANUFACTURER = "manufacturer"; 
    public static final String KEY_MODEL = "model"; 
    public static final String KEY_YEAR = "year"; 
    public static final String KEY_TYPE = "type"; 
    public static final String KEY_ROWID = "_id"; 



    private SQLiteHelper sqLiteHelper; 
    private SQLiteDatabase sqLiteDatabase; 


    /** 
    * Database creation SQL statement 
    */ 
    private static final String DATABASE_CREATE = 
      "create table " + DATABASE_TABLE + " (" 
        + KEY_ROWID + " integer primary key autoincrement, " 
        + KEY_MANUFACTURER + " text not null, " 
        + KEY_MODEL + " text not null, " 
        + KEY_YEAR + " text not null, " 
        + KEY_TYPE + " text not null);"; 



    private Context context; 

    public class SQLiteHelper extends SQLiteOpenHelper { 

     public SQLiteHelper(Context context, String name, 
       CursorFactory factory, int version) { 
      super(context, name, factory, version); 
     } 


     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL(DATABASE_CREATE); 
     } 






    } 


    public SQLiteAdapter(Context c){ 
     context = c; 
    } 



    public long insert(String manufcturar, String model, String year ,String type) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_MANUFACTURER, manufcturar); 
     initialValues.put(KEY_MODEL, model); 
     initialValues.put(KEY_YEAR, year); 
     initialValues.put(KEY_TYPE, type); 
     return sqLiteDatabase.insert(DATABASE_TABLE, null, initialValues); 
    } 
+1

使用asynctask。請參閱android開發人員網站上的教程。 – njzk2 2012-03-16 14:34:45

回答

0

運行數據庫腳本權利之前,您可以顯示忙/進度圖標,使其後dissaper代碼的執行。

cur.moveToFirst(); //right before this line enable the progressbar 
if (cur.getInt(0) == 0) 

{ 
//Insert 
} 

//finish 
+0

這不起作用。數據庫更新阻止了UI線程;直到'onCreate'返回時,進度條纔會顯示。 – 2012-03-16 14:38:51

1

您需要在工作線程中運行數據庫更新並在UI線程上發佈進度。此工具使用的是AsyncTask。班級文件有一些示例代碼,在指南主題Processes and ThreadsPainless Threading文章中還有更多內容。最後一個鏈接是開始閱讀的最簡單的地方。

0

我認爲你應該使用AsyncTask。 In your Activity:

private static final int PROGRESS_DIALOG_ID = 0; 

    ..... 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     if (id == PROGRESS_DIALOG_ID) { 
      ProgressDialog dialog = new ProgressDialog(this); 
      dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      dialog.setMessage("Loading..."); 
      dialog.setCancelable(false); 
      return dialog; 
     } 
    } 

    ........ 

    class SomeTask extens AsyncTask<Void, Void, Void>() { 

     @Override 
     protected void onPreExecute() { 
      showDialog(PROGRESS_DIALOG_ID); 
     } 

     @Override 
     protected void doInBackground(Void... voids) { 
      //fill your database 
     } 

     @Override 
     protected void onPostExecute(Void voids) { 
      dismissDialog(PROGRESS_DIALOG_ID); 
     } 

    } 
+0

class SomeTask extens AsyncTask (){.... shuold我把同樣的活動或其他Java文件 – user1274213 2012-03-16 15:16:21

+0

是把它放在你的活動,並調用新的SomeTask()。 – 2012-03-16 15:18:03

+0

我已經做到了把上有一個標記錯誤語法錯誤,AnnotationName預期,而不是在課堂上 – user1274213 2012-03-16 15:31:44

相關問題