首页 > 解决方案 > 我的代码没有在数据库中写入任何内容

问题描述

我需要在每个项目中写入三个值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);
}

标签: javasqliteandroid-studioandroid-sqlite

解决方案


终于想通了!您正在尝试写入数据,但使用方法 getReadableDatabase()。尝试使用https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase()

编辑:实际上这可能是构造函数的问题!


推荐阅读