我的应用程序有一个嵌入式数据库。它在资产文件夹中。用户应该能够在按钮单击时向数据库添加新行。我有以下代码:
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查询测试了插入的值)。在使用buttonpress插入期间,我没有任何异常。谁能说出为什么没有插入来自edittext的editmacs值?提前致谢。
好的,我从Guillaume的评论中得到了解决方案(见下文)。与插入相关的查询都可以。问题出在其他地方。请查看以下代码:
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(因此在Sqliteman中表示Text = CharSequence)。我期望的mac地址是用户最后输入的mac地址。来自editmac视图的此mac地址将转换为String。因此,必须将其检索为String,而不是CharSequence。再次感谢Guillaume的帮助,指导我解决方案。
答案 0 :(得分:0)
您的代码没有任何问题,它应该在列中插入传递的值。
尝试通过添加某种调试警报来确保您拥有值,例如Toast:
String editmacs=editmac.getText().toString();
Toast.makeTest(getApplicationContext(), "Value to insert = " + editmacs, Toast.LENGTH_SHORT).show();
db.insertrow(editmacs);
如果你得到了你期望的价值,请告诉我。如果不是(这是我的猜测),那可能是因为你从错误的TextView
中读取了文本值。
您确定从右侧视图中正确初始化了editmac
吗?