2011-12-14 3 views
2

У меня есть встроенная база данных с моим приложением. он находится в папке с активами. Пользователь должен иметь возможность добавлять новые строки в базу данных при нажатии кнопки. У меня есть следующий код, который:sqlite insert on button click

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) не включены в базу данных. Но вставляются другие значения (FOR EXAMPLE "uz") (я тестировал вставленные значения с sql-запросом). Во время вставки с помощью buttonpress я не получаю никакого исключения. Может ли кто-нибудь сказать, почему значение 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 = CharSequence в Sqliteman). Мой ожидаемый MAC-адрес - это последний введенный пользователем MAC-адрес. Этот MAC-адрес из вида editmac преобразуется в String. Таким образом, нужно получить его как String, а не как CharSequence. Еще раз спасибо Гийому за помощь в руководстве меня к решению.

+0

проверить тип данных KEY_column1 по сравнению с ключом KEY_column2 –

+0

u можете проверить значение -> если оно пустое или нет Log.i («debug», editmacs); – Dezigo

+0

@ Sunil, я создал встроенную базу данных из Sqliteman, а типы данных для всех столбцов - это текст. –

ответ

0

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

Try, чтобы убедиться, у вас есть значение, добавляя какие-то отладки боевой готовности, как Тост:

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

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

Вы уверены, что editmac был правильно инициализирован из избранного.

+0

thanks..yea Я использовал тост, он показывает мое типизированное значение в editmac. и моя инициализация для editmac: 'TextView editmac;' и 'editmac = (TextView) this.findViewById (R.id.addmac);' –

+0

Хм, это действительно странно. Вы пробовали с базовым значением (только текст, никаких специальных символов, например «foo»?) – Guillaume

+0

Я просто подумал о чем-то другом: может быть, ваш MAC-адрес в базе данных в порядке, и это ваш запрос, чтобы прочитать ошибочное значение? – Guillaume