sqlite вставка по нажатию кнопки - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть встроенная база данных с моим приложением.это в папке активов.Пользователь должен иметь возможность добавлять новые строки в базу данных по нажатию кнопки.У меня есть следующий код для этого:

insertrow.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                db.open();
                try
                {
                    String editmacs=editmac.getText().toString();
                    db.insertrow(editmacs); 
                //  Context context = getApplicationContext();

                }
                catch (Exception ex)
                {
                  Toast.makeText(getApplicationContext(), "cannot update", Toast.LENGTH_LONG).show();
                  }
                db.close();
            }
          });

и соответствующий метод в моем классе SQliteOpenHelper:

public static SQLiteDatabase myDb;
public static String DATABASE_TABLE="access_points";
public static final String KEY_column1 = "col1";
public static final String KEY_column2 = "col2";
public static final String KEY_column3= "col3";
public static final String KEY_column4 = "col4";

public long insertrow(String editmacs) 
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_column1, editmacs);
            initialValues.put(KEY_column2, "uf");
            initialValues.put(KEY_column3, "ub");
            initialValues.put(KEY_column4, "uz");
            return myDb.insert(DATABASE_TABLE, null, initialValues);
        }

Проблема заключается в нажатии кнопки editmacs (KEY_column1) не вставленв базу данных.Но другие значения (ДЛЯ ПРИМЕРА "uz") вставлены (я проверил вставленные значения с SQL-запросом).Во время вставки с помощью кнопки я не получаю никаких исключений.Может кто-нибудь сказать, почему значение editmacs из edittext не вставляется?Заранее спасибо.

Хорошо, я получил решение из комментариев Гийома (см. Ниже).Запросы, связанные с вставкой, в порядке.Проблема в другом.Посмотрите на следующий код:

buttonuserentry.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                db.open();
                try
                {
                    String mac = "";
                    mac = db.getuserentry();
                    Context context = getApplicationContext();
                    String text = mac;
                    int duration = Toast.LENGTH_LONG;

                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
                catch (Exception ex)
                {
                    Context context = getApplicationContext();
                    CharSequence text = ex.toString();
                    int duration = Toast.LENGTH_LONG;

                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
                db.close();

            }
        });

ранее, я использовал это:

CharSequence mac = "";    
mac = db.getuserentry();
Context context = getApplicationContext();
String text = mac;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();

Поскольку я использовал CharSequence, он показывал последний вставленный MAC-адрес из исходной базы данных.Исходная встроенная база данных объявила этот столбец как Text (так что это означает Text = CharSequence в Sqliteman).Мой ожидаемый mac-адрес - последний введенный пользователем mac-адрес.Этот mac-адрес из представления editmac преобразуется в строку.Таким образом, нужно получить его как String, а не как CharSequence.Еще раз спасибо за помощь Гийома в направлении меня к решению.

1 Ответ

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

В вашем коде нет ничего плохого, он должен вставить переданное значение в столбец.

Попробуйте убедиться, что у вас есть значение, добавив какое-то предупреждение об отладке, например, Toast:

String editmacs=editmac.getText().toString();
Toast.makeTest(getApplicationContext(), "Value to insert = " + editmacs, Toast.LENGTH_SHORT).show();
db.insertrow(editmacs); 

И дайте мне знать, если вы получите ожидаемое значение.Если нет (это мое предположение), то это, вероятно, потому, что вы прочитали текстовое значение из неправильного TextView.

Вы уверены, что editmac правильно инициализируется из правильного представления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...