【发布时间】:2015-11-20 07:20:54
【问题描述】:
我正在使用 sqlite 数据库,如果我在我的数据库中添加一个现有项目,我希望它覆盖并在其数量上添加 1,我知道这是可能的,但我不知道如何。有人可以帮我吗?如果有人这样做(我是编程新手),我将非常感激这是我的项目*
这是我将项目添加到数据库并在列表视图中显示的窗口
public class pop_up extends Activity {
int qty;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pop_up);
EditText quantity = (EditText)findViewById(R.id.quantity);
quantity.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
try{
qty = 1;
}catch(Exception e){
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
try{
qty = Integer.valueOf(s.toString()).intValue();
}catch(Exception e){
}
}
});
Intent getpop_up = getIntent();
final int price = getpop_up.getIntExtra("passedprice", 0);
final String name = getpop_up.getStringExtra("passedname");
Button add = (Button) findViewById(R.id.add);
TextView menuprice = (TextView)findViewById(R.id.menuprice);
String initialprice = String.valueOf(price);
menuprice.setText(initialprice);
TextView menuname = (TextView)findViewById(R.id.menuname);
String currentname = String.valueOf(name);
menuname.setText(currentname);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast toast;
int tprice = ((price)*(qty));
SQLiteDatabase db = openOrCreateDatabase("Orders.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
MDB mdb = new MDB(getApplicationContext(), "Orders.db", null, 1);
db = mdb.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("Food", name);
cv.put("Price", tprice);
cv.put("Quantity", qty);
db.insert("OrderedList", null, cv);
toast=Toast.makeText(getApplicationContext(), "Added successfully", Toast.LENGTH_SHORT);
finish();
toast.show();
}
});
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width=dm.widthPixels;
int height = dm.heightPixels;
getWindow().setLayout((int) (width),(int) (height*.6));
}
}
这是我的列表视图适配器
public class ListView_Adapter extends ArrayAdapter<String> {
private final Context context;
private String[] column1;
private double[] column2;
private int[] column3;
public ListView_Adapter(Context context, String[] column1, double[] column2, int[] column3) {
super(context, R.layout.list_adapter, column1);
this.context = context;
this.column1 = column1;
this.column2 = column2;
this.column3 = column3;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_adapter, parent, false);
}
TextView t1 = (TextView) convertView.findViewById(R.id.t1);
TextView t2 = (TextView) convertView.findViewById(R.id.t2);
TextView t3 = (TextView) convertView.findViewById(R.id.t3);
t1.setText(column1[position]);
t2.setText("₱" + column2[position]);
t3.setText("" + column3[position]);
return convertView;
}
}
【问题讨论】:
-
您应该在插入新项目之前迭代数据库。如果您的项目的某些唯一标识符匹配,则不要插入。还将您的问题编辑为如何覆盖数据库中的项目而不是创建新项目
-
您应该为每个项目提供 id,并且在将项目存储到 db 时检查该 id 并增加 db 中的计数,创建一个包含 item_name,item_id 的 myItem pojo 类会更容易
-
如上所述分配唯一 ID。然后出于性能原因考虑使用Insert or replace,而不是执行往返业务逻辑。
标签: java android sqlite android-listview