java - 我的代码没有在数据库中写入任何内容
问题描述
我需要在每个项目中写入三个值database
,之后我需要从数据库中检索数据SQLite
以显示购物车中的项目,但它不会在数据库中写入任何内容,当我尝试检索所有我得到的是一个空项目,只有没有值的布局
我真的不知道如何使用SQLite
,我希望我的代码是正确的
这是我在其中写入数据的 onBindViewHolder database
:
@Override
protected void onBindViewHolder(@NonNull FragmentUnuViewHolder fragmentUnuViewHolder, int i, @NonNull final FragmentUnuModel fragmentUnuModel) {
fragmentUnuViewHolder.denumire.setText(fragmentUnuModel.getDenumire());
fragmentUnuViewHolder.descriere.setText(fragmentUnuModel.getDescriere());
fragmentUnuViewHolder.pret.setText(Integer.toString(fragmentUnuModel.getPret())+" RON");
Picasso.with(getActivity().getBaseContext()).load(fragmentUnuModel.getImagine()).into(fragmentUnuViewHolder.img);
fragmentItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Database(getActivity().getBaseContext()).addToCart(new OrderModel(
fragmentUnuModel.getDenumire(),
fragmentUnuModel.getDescriere(),
fragmentUnuModel.getPret()
));
Toast.makeText(getActivity(),"Added to Cart "+fragmentUnuModel.getDenumire(),Toast.LENGTH_LONG).show();
}
});
}
这是Cart.java
:
public class Cart extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference request;
TextView txtTotalPrice;
List<OrderModel> cart = new ArrayList<>();
CartAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
//Firebase
database = FirebaseDatabase.getInstance();
request = database.getReference("Comanda");
//Init
recyclerView = (RecyclerView)findViewById(R.id.listCart);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
txtTotalPrice = (TextView)findViewById(R.id.total);
loadListFood();
}
private void loadListFood() {
cart = new Database(this).getCarts();
adapter = new CartAdapter(cart,this);
recyclerView.setAdapter(adapter);
//Calc TOTAL PRICE
int total = 0;
for(OrderModel order:cart)
total+=(Integer.parseInt(String.valueOf(order.getPret()))); /* *(Integer.parseInt(order.getQuantity())); */
Locale locale = new Locale("en","EU");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
txtTotalPrice.setText(fmt.format(total));
}
这是CartAdapter.java
:
public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {
private List<OrderModel> listData = new ArrayList<>();
private Context context;
public CartAdapter(List<OrderModel> listData, Context context) {
this.listData = listData;
this.context = context;
}
@Override
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View itemView = inflater.inflate(R.layout.cart_layout, parent, false);
return new CartViewHolder(itemView);
}
@Override
public void onBindViewHolder(CartViewHolder holder, int position) {
/* TextDrawable drawable = TextDrawable.builder().buildRound("" + listData.get(position).getQuantity(), Color.RED);
holder.img_cart_count.setImageDrawable(drawable);
*/
String price = (Integer.parseInt(String.valueOf(listData.get(position).getPret()))) + " RON" ; /* * (Integer.parseInt(listData.get(position).getQuantity())); */
holder.txt_price.setText((price));
holder.txt_cart_name.setText(listData.get(position).getDenumireProdus());
这是OrderModel.java
带有 getter 和 setter 的列表:
public class OrderModel {
private String DenumireProdus;
private String Cantitate;
private int Pret;
public OrderModel(String denumireProdus, String cantitate, int pret) {
DenumireProdus = denumireProdus;
Cantitate = cantitate;
Pret = pret;
}
public OrderModel(String denumireProdus, String cantitate, String pret) {
}
public String getDenumireProdus() {
return DenumireProdus;
}
public void setDenumireProdus(String denumireProdus) {
DenumireProdus = denumireProdus;
}
public String getCantitate() {
return Cantitate;
}
public void setCantitate(String cantitate) {
Cantitate = cantitate;
}
public int getPret() {
return Pret;
}
public void setPret(int pret) {
Pret = pret;
}
我真的需要这个帮助,我走上了死胡同,我不想重写所有的程序。
我希望在数据库中写一些东西,但它根本没有写任何东西。但是当我单击该项目时吐司它说的正是项目,我认为某处连接不好。
数据库类
public class Database extends SQLiteAssetHelper {
private static String DB_NAME="OrderMeDB.db";
private static int DB_VER=1;
public Database(Context context) {
super(context, DB_NAME,null,DB_VER );
}
public List<OrderModel> getCarts()
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlSelect = {"DenumireProdus" , "Cantitate" , "Pret"};
String sqlTable = "Comanda";
qb.setTables(sqlTable);
Cursor c = qb.query(db , sqlSelect , null,null,null,null,null);
final List<OrderModel> result = new ArrayList<>();
if(c.moveToFirst())
{
do{
result.add(new OrderModel(c.getString(c.getColumnIndex("DenumireProdus")),
c.getString(c.getColumnIndex("Cantitate")),
c.getString(c.getColumnIndex("Pret"))
));
}while (c.moveToNext());
}
return result;
}
public void addToCart(OrderModel order)
{
SQLiteDatabase db = getReadableDatabase();
String query = String.format("INSERT INTO Comanda(DenumireProdus,Cantitate,Pret) VALUES('%s','%s','%s');",
order.getDenumireProdus(),
order.getCantitate(),
order.getPret());
db.execSQL(query);
}
解决方案
终于想通了!您正在尝试写入数据,但使用方法 getReadableDatabase()。尝试使用https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase()
编辑:实际上这可能是构造函数的问题!
推荐阅读
- java - 如何提示接口的植入有一些指定的数据成员?
- ios - 如何使用 Firebase 实现评论部分
- ssrs-2008 - SSRS 不同值的总和
- html - 有没有更有效的方法让按钮变成不同的颜色?
- android - Android Studio:小部件位置问题 - 如何根据屏幕大小调整大小?
- javascript - 在 Django 应用程序中嵌入浏览器
- php - 调用未定义的方法soapclient::GetOrdersByClientPO()?
- recursion - F# 两个递归函数定义行为的奇怪差异
- sql - SQL:修改内连接以选择一行
- android - 画布在可绘制对象内绘制颜色。不要触摸图像的透明部分