我在SQLite数据库中插入数据时遇到问题。当我点击按钮保存时,我没有在SQLite编辑器中看到数据。 这段代码出了什么问题?
1)AddMedicine.java
private void AddData() {
btn3.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
HashMap queryValues = new HashMap();
queryValues.put("medicine", medicine.getText().toString());
queryValues.put("quantity", quantity.getText().toString());
queryValues.put("date", date.getText().toString());
queryValues.put("time", time.getText().toString());
boolean isInserted = myDb.insertData(queryValues);
if (isInserted = true) {
Toast.makeText(AddMedicine.this, "Data inserted", Toast.LENGTH_LONG).show();
Intent i = new Intent(AddMedicine.this, MainActivity.class);
startActivity(i);
// this.callHomeActivity(view);
} else
Toast.makeText(AddMedicine.this, "Data not inserted", Toast.LENGTH_LONG).show();
}
}
);
}
2)DatabaseHelper.java
public boolean insertData(String Name, String quantity, String Date, String Time) {
db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, Name);
contentValues.put(COL_3, quantity);
contentValues.put(COL_4, Date);
contentValues.put(COL_5, Time);
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1) {
return false;
} else {
return true;
}
}
答案 0 :(得分:1)
方法insertData
需要4个参数才能完成工作,但是将HashMap
作为唯一参数传递给此方法。可能是你的问题?
希望它有所帮助。
<强> UPD 强>
您有几种可能性来改变这种情况。
第一次使用的代码,由 GreenRobo 建议,或者您可以重写方法insertData
以适合您的HashMap
参数。例如:
public boolean insertData(Map<String> map) {
db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, map.get("name"));
contentValues.put(COL_3, map.get("quantity"));
contentValues.put(COL_4, map.get("date"));
contentValues.put(COL_5, map.get("time"));
long result = db.insert(TABLE_NAME, null, contentValues);
return (result != - 1);
}
答案 1 :(得分:0)
您可以使用此方法
myDb.insertData(medicine.getText().toString(), quantity.getText().toString(), date.getText().toString(), time.getText().toString());
。 根据你的方法实现
答案 2 :(得分:0)
首先,您必须为数据库创建一个模型类,以便从中保存和检索数据。
new View.OnClickListener() {
@Override
public void onClick(View view) {
String e1 = medicine.getText().toString();
String e2 = quantity.getText().toString();
String e3 = date.getText().toString();
String e4 = time.getText().toString();
User user = new User();
user.setMedicine(e1);
user.setQuantity(e2);
user.setDate(e3);
user.setTime(e4);
Databasehandler db = new Databasehandler(getActivity());
db.insert(user);
}
});
} 你的Adddata方法就像:
btn3.setOnClickListener(
boolean insertData(User user){
SQLiteDatabase db=getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(COL_2,user.getMedicine());
cv.put(COL_3,user.getQuantity());
cv.put(COL_4, user.getDate());
cv.put(COL_5, user.getTime());
/// from here you can check the data you getting
System.out.println("Medicine-------------" + user.getMedicine());
System.out.println("Quan-------------" + user.getMedicine());
System.out.println("Date-------------" + user.getDate());
System.out.println("Time-------------"+user.getTime());
long result = db.insert(TABLE_NAME, null, cv);
if (result == -1) {
return false;
} else {
return true;
}
}
使用以下命令在Databasehandler中重复执行insertdata方法:
for()
答案 3 :(得分:0)
对于您使用的方法......: 这些是你必须做的改变:
new View.OnClickListener() {
@Override
public void onClick (View view){
String e1 = medicine.getText().toString();
String e2 = quantity.getText().toString();
String e3 = date.getText().toString();
String e4 = time.getText().toString();
HashMap queryValues = new HashMap();
queryValues.put("medicine", e1);
queryValues.put("quantity", e2);
queryValues.put("date", e3);
queryValues.put("time", e4);
boolean isInserted = myDb.insertData(queryValues);
if (isInserted == true) {
Toast.makeText(AddMedicine.this, "Data inserted", Toast.LENGTH_LONG).show();
Intent i = new Intent(AddMedicine.this, MainActivity.class);
startActivity(i);
// this.callHomeActivity(view);
} else
Toast.makeText(AddMedicine.this, "Data not inserted", Toast.LENGTH_LONG).show();
}
}
public boolean insertData(HashMap h) {
db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, h.get("medicine"));
contentValues.put(COL_3, h.get("quantity"));
contentValues.put(COL_4, h.get("date"));
contentValues.put(COL_5, h.get("time"));
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1) {
return false;
} else {
return true;
}
}
到目前为止,从hashmap获取数据的方法是错误的。 还有一个apporch可以直接传递方法中的e1,e2,e3,e4,并且你的insertData将保持不变。