2012-05-10 169 views
0

我已經創建了SQLite數據庫,我想在微調中插入列數據。我在下面寫了這段代碼,但它不起作用。問題是什麼?我有問題從數據庫插入數據到微調SQLite

下面是代碼:

public class RemoveWorkflow2 extends Activity { 

private EditText nameEditText; 
private EditText classEditText; 
//private EditText idEditText; 
//private int mSpinnerWF; 
Spinner spin; 
WorkflowChoice wf = new WorkflowChoice(); 

MyDatabase mDB; 

//MyDatabase mDB = wf.getDb(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.remove_wf2); 

    mDB = new MyDatabase(getApplicationContext()); 
    spin = (Spinner)findViewById(R.id.wf_spinner); 

    fillSpinner(spin); 

    Button btn = (Button)findViewById(R.id.button11); 
    btn.setText("Rimuovi"); 
    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 


     } 
    }); 
    /* 
    Spinner spin = (Spinner)findViewById(R.id.wf_spinner); 
    Cursor cur = mDB.fetchWfs(); 
    startManagingCursor(cur); 

    String[] from = new String[] { WfMetaData.WF_NAME_KEY }; 
    int[] to = new int[] { android.R.id.text1 }; 
    SimpleCursorAdapter spinAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cur, from, to); 
    spinAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spin.setAdapter(spinAdapter); 

    spin.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
      Cursor c = (Cursor)parent.getItemAtPosition(pos); 
      mSpinnerWF = c.getInt(c.getColumnIndexOrThrow(WfMetaData.WF_NAME_KEY)); 
     } 
     @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
     } 
    });*/ 

} 

private void fillSpinner(Spinner s){ 

    Cursor c = mDB.fetchWfs(); 
    startManagingCursor(c); 

    // create an array to specify which fields we want to display 
    String[] from = new String[]{WfMetaData.WF_NAME_KEY}; 
    // create an array of the display item we want to bind our data to 
    int[] to = new int[]{android.R.id.text1}; 
    // create simple cursor adapter 
    SimpleCursorAdapter adapter = 
     new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    // get reference to our spinner 
    s.setAdapter(adapter); 
    } 

,這裏是另一個MyDatabase的:

public class MyDatabase { 

    SQLiteDatabase mDb; 
    DbHelper mDbHelper; 
    Context mContext; 
    private static final String DEBUG_TAG = "WFListDatabase"; 
    private static final String DB_NAME="WFListdb";//nome del db 
    private static final int DB_VERSION=1; //numero di versione del nostro db 

    public MyDatabase(Context ctx){ 
     mContext = ctx; 
     mDbHelper = new DbHelper(ctx, DB_NAME, null, DB_VERSION); //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)  
    } 

    public void open(){ //il database su cui agiamo è leggibile/scrivibile 
      mDb=mDbHelper.getWritableDatabase(); 

    } 

    public void close(){ //chiudiamo il database su cui agiamo 
      mDb.close(); 
    } 


    public void insertWf(String name,String cls){ //metodo per inserire i dati 
      ContentValues cv=new ContentValues(); 
      cv.put(WfMetaData.WF_NAME_KEY, name); 
      cv.put(WfMetaData.WF_CLASS_KEY, cls); 
      mDb.insert(WfMetaData.WF_TABLE, null, cv); 
    } 



    public Cursor fetchAllWfs(){ //metodo per fare la query di tutti i dati 
     return mDb.query(WfMetaData.WF_TABLE, new String[]{WfMetaData.WF_NAME_KEY, WfMetaData.WF_CLASS_KEY},null,null,null,null,null);    
    } 

    static class WfMetaData { // i metadati della tabella, accessibili ovunque 
    static final String WF_TABLE = "wfs"; 
    static final String ID = "_id"; 
    static final String WF_NAME_KEY = "name"; 
    static final String WF_CLASS_KEY = "class"; 
    } 


    private static final String WF_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " //codice sql di creazione della tabella 
        + WfMetaData.WF_TABLE + " (" 
        + WfMetaData.ID+ " integer primary key autoincrement, " 
        + WfMetaData.WF_NAME_KEY + " text not null, " 
        + WfMetaData.WF_CLASS_KEY + " text not null);"; 

    public Cursor fetchWfs(){ //metodo per fare la query di tutti i dati 
     return mDb.query(WfMetaData.WF_TABLE, null,null,null,null,null,null);    
} 

    public void delete_byName(String n){ 
    mDb.delete(WfMetaData.WF_TABLE, WfMetaData.WF_NAME_KEY + "='" +n + "'", null); 
    //mDb.delete(WfMetaData.WF_TABLE, WfMetaData.WF_NAME_KEY + "=?", new String[] { n }); 

    CharSequence text = "Il Workflow "+ n +" è stato rimosso con successo!"; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(mContext, text, duration); 
    toast.show(); 
    } 

    private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db 

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

     @Override 
     public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella 
      _db.execSQL(WF_TABLE_CREATE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 
      Log.w(DEBUG_TAG, "Upgrading database. Existing contents will be lost. [" 
        + oldVersion + "]->[" + newVersion + "]"); 
      _db.execSQL("DROP TABLE IF EXISTS " + WF_TABLE_CREATE); 
      onCreate(_db); 
     }  

    } 


    public boolean isEmpty(){ 
     boolean isEmpty = true; 
     Cursor cursor = mDb.query(WfMetaData.WF_TABLE, new String[] { WfMetaData.WF_NAME_KEY }, null, null, null, null, null); 
     if (cursor != null && cursor.getCount() > 0) 
     { 
      isEmpty = false; 
     } 
     return isEmpty; 
    } 
} 

這裏是xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView10" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Scegli il workflow da eliminare: " 
     android:gravity="center" /> 


    <Spinner 
     android:id="@+id/wf_spinner" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/button11" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Button" /> 

</LinearLayout> 

而且隨着NullPointerException異常的logcat的。 。

05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1721) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.ActivityThread.access$1500(ActivityThread.java:124) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.os.Looper.loop(Looper.java:130) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.ActivityThread.main(ActivityThread.java:3844) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at java.lang.reflect.Method.invoke(Method.java:507) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at dalvik.system.NativeStart.main(Native Method) 
05-10 11:48:04.475: E/AndroidRuntime(24650): Caused by: java.lang.NullPointerException 
05-10 11:48:04.475: E/AndroidRuntime(24650): at com.tilab.wade.interactivity.android.client.RemoveWorkflow2.fillSpinner(RemoveWorkflow2.java:82) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at com.tilab.wade.interactivity.android.client.RemoveWorkflow2.onCreate(RemoveWorkflow2.java:44) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-10 11:48:04.475: E/AndroidRuntime(24650): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660) 
05-10 11:48:04.475: E/AndroidRuntime(24650): ... 11 more 
05-10 11:48:04.485: W/ActivityManager(1610): Force finishing activity com.tilab.wade.interactivity.android.client/.RemoveWorkflow2 
+0

問題是什麼?任何異常?> –

+0

我用Logcat編輯了這個問題..我有一個NullPointerException,但我不知道爲什麼! – darkmax

+0

見行號82在RemoveWorkflow2中。 –

回答

0
MyDatabase mDB = new MyDatabase(getApplicationContext()); 

你實例化一個隱藏全局變量的局部變量,所以全局mDB爲空。

mDB = new MyDatabase(getApplicationContext());

+0

我該如何修改? – darkmax

+0

我必須添加MyDatabase mDB = new MyDatabase(getApplicationContext());出於創建? – darkmax

+0

我該如何解決這個問題?我必須創建一個get方法,然後填充MyDatabase mDB = getDB? – darkmax

-1

看來你並沒有打開數據庫。

0

你是在你的onCreate initailizing一個局部變量MDB和可能使用fillSpinner全局變量。糾正並檢查它是否可行

+0

我該如何編輯? – darkmax