无法将数据插入到Android设备的sqlite数据库中

时间:2011-12-19 08:42:11

标签: android database sqlite insert

我在将数据插入数据库时​​遇到了未知错误。 LogCat显示“无法插入数据”,但是,我使用的代码是从另一个活动中复制的(有效)。

很奇怪,当我将代码放在onStart()方法中时,它可以工作。但当我进入我的onClick()时,它失败了。

onStart():< - 不确定它是否与错误有关

@Override
public void onStart() {
    super.onStart();

    dbopener = new DB_Route_ListOpener(this);

    try {

        dbopener.createDatabase();

    } catch (IOException ioe) {

        throw new Error("Unable to create database");

    }//create database

    try {

        dbopener.openDatabase();

    }catch(SQLException sqle){

        throw sqle;

    }//open database

    // Configure the listview
    routeItems = new ArrayList<String>(dbopener.selectData(new String [] {"RouteName"}, null, null, null, null, null));

    routeListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,routeItems);
    routeListItem = (ListView)this.findViewById(R.id.mlt_route_list_route);
    routeListItem.setAdapter(routeListAdapter);
    routeListItem.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    dbopener.close();

}//onStart

onClick()

@Override
public void onClick(View v) {

    // TODO Auto-generated method stub
    if (v == findViewById(R.id.mlt_route_btn_addroute))//add
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setCancelable(false);
        builder.setMessage("Add name ?");

        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
        {

            public void onClick(DialogInterface dialog, int which) 
            {
                // TODO Auto-generated method stub
                dialog.dismiss();

                ContentValues cv = new ContentValues();
                cv.put("RouteName", "test");
                dbopener.insertData(null, cv);

            }
        });//clear all data

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
        {

            public void onClick(DialogInterface dialog, int which) 
            {
                // TODO Auto-generated method stub
                dialog.cancel();
            }
        });//negative

        builder.create().show();
    }//if

我的插入查询:

public void insertData (String nullColumnHack, ContentValues values) {

    try
    {
        myDatabase.insert(DB_TABLE, nullColumnHack, values);
    } catch (Exception e) {
        Log.e("Error :","unable to insert data");
    }//catch

}//insertData

2 个答案:

答案 0 :(得分:1)

您需要将dbopener设置为全局变量并将dbopener.close();OnStart()移至OnDestroy(),因为您在插入数据之前关闭了数据库

答案 1 :(得分:0)

AlertDialog.Builder builder = new AlertDialog.Builder(this);不要在任何点击侦听器中使用“this”,因为它引用当前视图而不是父视图。尝试使用className.this,如下所示......

 AlertDialog.Builder builder = new AlertDialog.Builder(className.this);