невозможно вставить данные в базу данных sqlite для устройства Android - PullRequest
0 голосов
/ 19 декабря 2011

Я столкнулся с неизвестной ошибкой при вставке данных в базу данных.В LogCat отображалось «невозможно вставить данные», однако код, который я использовал, скопирован из другого действия (которое работает).

достаточно странно, когда я поместил код в onStart()метод, это работает.но когда я поместил в свой onClick(), это не удалось.

onStart(): <- не уверен, связано ли это с ошибкой </p>

@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 ]

1 голос
/ 19 декабря 2011

Вам необходимо установить dbopener в качестве глобальной переменной и переместить dbopener.close(); с OnStart() на OnDestroy(), поскольку вы закрыли БД перед вставкой данных

0 голосов
/ 19 декабря 2011

AlertDialog.Builder builder = new AlertDialog.Builder(this); не используйте «this» в любом прослушивателе кликов, потому что он ссылается на текущее представление вместо родительского представления. Попробуйте использовать className.this, как показано ниже ...

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