2013-05-09 36 views
0

我是android初學者。我想從sqlite數據庫中獲得微調列表。我看了很多次,但很難找出哪一個不正確。 這裏是代碼...從數據庫中獲取微調列表

public class SalesEntry extends Activity { 

Spinner spin; 

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

    spin = (Spinner) findViewById(R.id.spinner1); 

    loadDiscountData(); // load from database 


    spin.setOnItemSelectedListener(new OnItemSelectedListener() 
    { // when a spinner item is selected 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

} 

private void loadDiscountData() { 
    try { 
     // TODO Auto-generated method stub 

     Data db = new Data(getApplicationContext()); 
     ArrayList<String> lables= new ArrayList<String>(); 
     lables = db.getAllLabels(); 

     // Creating adapter for spinner 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
     R.layout.spinner_row, lables); 

     spin.setAdapter(dataAdapter); 

    } catch (Exception e) { 
     String error = e.toString();// make a error message 
     Dialog d = new Dialog(this); 
     d.setTitle("Error!"); 
     TextView tv = new TextView(this); 
     tv.setText(error);// writing a error message not using a text 
     d.setContentView(tv); 
     d.show(); 
    } 
} 
} 

public class Data { 

// Contacts Table Columns names 
// public static final String KEY_ROWID = "_id"; 
public static final String KEY_DISCOUNT = "_discount"; 

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "DiscountData"; 
private static final String DATABASE_TABLE = "discountTable"; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { // create db table 
     // TODO Auto-generated method stub 
     String CREATE_DISCOUNT_TABLE = "CREATE TABLE " + DATABASE_TABLE 
       + " (" 
       // + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
       + KEY_DISCOUNT + " INTEGER" + ")"; 
     db.execSQL(CREATE_DISCOUNT_TABLE); 
     // CREATE TABLE discountTable (_id INTEGER PRIMARY KEY _discount 
     // TEXT); 


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); // upgrade database. 

    } 
} 

public Data(Context c) { 
    ourContext = c; 
} 

public Data open() { 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    ourHelper.close(); 
} 

public long createEntry(String data) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_DISCOUNT, data);// open message which create date 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

public void deletEntry(String mDelet) { 
    // TODO Auto-generated method stub 
    ourDatabase.delete(DATABASE_TABLE, KEY_DISCOUNT + "=" + mDelet, null); 
} 

public String getDiscountList() { 
    // TODO Auto-generated method stub 
    String[] columns = new String[] { KEY_DISCOUNT }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, 
      null, null); 
    String result = ""; 

    int iRow = c.getColumnIndex(KEY_DISCOUNT); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { // as long as 
                   // last. it 
                   // is move 
                   // to next 
     result = result + c.getString(iRow) + "% \n"; 
    } 

    return result; 
} 

public ArrayList<String> getAllLabels() { 
    // TODO Auto-generated method stub 

    ArrayList <String> labels = new ArrayList <String>(); 
    Cursor cursor = ourDatabase.rawQuery("SELECT * FROM " + KEY_DISCOUNT, null); 
    System.out.println("COUNT : " + cursor.getCount()); 

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) 
    { // as long as last.it is move to next 
     labels.add(cursor.getString(0)); 
    } 
    return labels; 
} 

} 

日誌貓輸出:

0 

5-09 16:12:00.207: E/AndroidRuntime(17815): FATAL EXCEPTION: main 
05-09 16:12:00.207: E/AndroidRuntime(17815): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.project/com.example.project.SalesEntry}: java.lang.NullPointerException 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1961) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.ActivityThread.access$600(ActivityThread.java:128) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1152) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.os.Looper.loop(Looper.java:137) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.ActivityThread.main(ActivityThread.java:4449) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at java.lang.reflect.Method.invokeNative(Native Method) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at java.lang.reflect.Method.invoke(Method.java:511) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at dalvik.system.NativeStart.main(Native Method) 
05-09 16:12:00.207: E/AndroidRuntime(17815): Caused by: java.lang.NullPointerException 
05-09 16:12:00.207: E/AndroidRuntime(17815): at com.example.project.Data.getAllLabels(Data.java:105) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at com.example.project.SalesEntry.loadDiscountData(SalesEntry.java:54) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at com.example.project.SalesEntry.onCreate(SalesEntry.java:27) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.Activity.performCreate(Activity.java:4465) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-09 16:12:00.207: E/AndroidRuntime(17815): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1925) 
05-09 16:12:00.207: E/AndroidRuntime(17815): ... 11 more 

回答

0

我相信你的SQL語句不正確。看起來你是從列名中選擇,而不是從表名選擇:

 SELECT * FROM " + KEY_DISCOUNT 


     String CREATE_DISCOUNT_TABLE = "CREATE TABLE " + DATABASE_TABLE 
      + " (" 
      // + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + KEY_DISCOUNT + " INTEGER" + ")"; 


     private static final String DATABASE_TABLE = "discountTable"; 
+0

謝謝你的回答... – user2365391 2013-05-17 07:10:53

+0

不客氣。請點擊複選標記「接受」。我會得到一些我可以兌換神話般商品的積分。 – Tim 2013-05-17 09:10:31