2015-05-14 54 views
0

我想从类Pr​​oduct中添加一个对象到我的SQLite数据库,但是如果我调用dbhandler.addProduct(Product product)方法,模拟器会崩溃并且logcat不会显示任何错误。SQLite不会创建行和崩溃

我ListviewActivity:

 ArrayAdapter<Product> adapter; 
ArrayList<Product> productnames=new ArrayList<>(); 
DBHandler dbhandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView productList=(ListView)findViewById(android.R.id.list); 

    dbhandler=new DBHandler(this,null,null,1); 

    adapter= new CustomAdapter(this,productnames); 
    productList.setAdapter(adapter); 

} 
public void addNewProduct(View view){ 
    EditText userInput=(EditText)findViewById(R.id.userInput); 
    userInput.setVisibility(View.VISIBLE); 
    String productname=userInput.getText().toString(); 

    if(productname.equals(""))return; 

    Product product=new Product(); 
    product.set_productname(productname); 
    product.set_checked(false); 
    productnames.add(product); 
    dbhandler.addProduct(product); 

    adapter.notifyDataSetChanged(); 
    userInput.setText(""); 

} 

如果我注释掉dbhandler.addProduct(产品)一切工作正常。

我DBHandler类:

public class DBHandler extends SQLiteOpenHelper{ 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME="products.db"; 
    public static final String TABLE_PRODUCTS= "products"; 
    public static final String COLUMN_ID="_id"; 
    public static final String COLUMN_PRODUCTNAME="productname"; 
    public static final String COLUMN_ISCHECKED="ischecked"; 

    public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String query= "CREATE TABLE" + TABLE_PRODUCTS + "("+ 
       COLUMN_ID + "INTEGER PRIMARY KEY AUTOINCREMENT" + 
       COLUMN_PRODUCTNAME + "TEXT" + 
       COLUMN_ISCHECKED + "BOOLEAN" + 
       ");"; 
     db.execSQL(query); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS" + TABLE_PRODUCTS); 
     onCreate(db); 
    } 

    public void addProduct(Product product){ 
     ContentValues values= new ContentValues(); 
     values.put(COLUMN_PRODUCTNAME,product.get_productname()); 
     values.put(COLUMN_ISCHECKED,product.is_checked()); 
     SQLiteDatabase db=getWritableDatabase(); 
     db.insert(TABLE_PRODUCTS,null,values); 
     db.close(); 
    } 
+0

什么崩溃?你有没有? –

+0

Logcat请。 – Razgriz

+0

首先检入/data/data/packagename/databases/products.db是否存在? –

回答

3

您需要添加空间的列名和列类型之间

String query= "CREATE TABLE " + TABLE_PRODUCTS + " ("+ 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      COLUMN_PRODUCTNAME + " TEXT, " + 
      COLUMN_ISCHECKED + " BOOLEAN" + 
      ")"; 

,列必须逗号分隔

同样的表名(缺少一个空格)

+2

工作就像一个魅力!谢谢 – Ollikas

+1

更快然后我!!!!! ahahahahah +1 –