房间没有更新

时间:2018-09-01 17:01:04

标签: android android-room

我想用房间更新listview中的元素,但是不起作用。 添加和删​​除工作正常,但更新不起作用 这是我的代码

@Insert
    public void addZakazi(Zakazi zakazi);

    @Query("select * from orders")
    public List<Zakazi> getZakazi();
    @Delete
    public void deleteZakazi(Zakazi zakaz);
    @Update
    public void updateZakazi(Zakazi zakazi);

我按下按钮并调用另一个片段的片段代码

update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Zakazi zakaz=getItem(position);
                String cNam=zakaz.getClName();
                String o=zakaz.getOrder();
                int pric=zakaz.getPricec();
                Bundle bundle=new Bundle();
                bundle.putInt("price",pric);
                bundle.putString("cName",cNam);
                bundle.putString("order",o);
               updateFragment uf =new updateFragment();
               uf.setArguments(bundle);
                FragmentTransaction ft=getFragmentManager().beginTransaction();
                ft.replace(R.id.fragmentContainer, uf);
                ft.addToBackStack(null);
                ft.commit();
            }
        });

        return convertView;
    }

必须完成更新的被调用片段的代码

@Override
    public View onCreateView( LayoutInflater inflater,  ViewGroup parent,  Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.update_order_layout,parent,false);
        Cname=(EditText)view.findViewById(R.id.clients_name_up);
        price=(EditText)view.findViewById(R.id.price_edit_up);
        order=(EditText)view.findViewById(R.id.order_edit_up);
        updateB=(Button)view.findViewById(R.id.updateB);
Bundle bundle=getArguments();
String ord=bundle.getString("order");
String clnam=bundle.getString("cName");
int pri=bundle.getInt("price");
Cname.setText(clnam);
price.setText(String.valueOf(pri));
order.setText(ord);
updateB.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       String cn=Cname.getText().toString();
       String orderr=order.getText().toString();
       int p=Integer.parseInt(price.getText().toString());

        Zakazi zakazi=new Zakazi();
        zakazi.setClName(cn);
        zakazi.setOrder(orderr);
        zakazi.setPricec(p);
        OrderActivity.myAppDatabase.myDao().updateZakazi(zakazi);
    }
});
        return view;

    }

1 个答案:

答案 0 :(得分:1)

问题是您要更新数据时正在创建Zakazi的新对象。因此,在您的对象中未设置主键id的值,因此数据库不会根据该对象来更新您的记录。

您必须按照以下步骤更新代码:
1.使用第一个片段中Zakazi中的getId()来获取update.setOnClickListener记录的自动生成的ID
2.传递该ID而不是价格,名称和订单。
3.使用您在另一个片段中从捆绑中收到的ID来获取Zakazi对象中的数据。
4.在updateB.setOnClickListener中更新从数据库中获取数据的同一对象中的数据,而不是创建新对象,然后尝试通过查询OrderActivity.myAppDatabase.myDao().updateZakazi(zakazi);

更新会议室数据库中的记录

希望它对您有用。