我想用房间更新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;
}发布于 2018-09-02 02:00:12
问题是,当您要更新数据时,您正在创建Zakazi的新对象。所以在你的对象中没有设置主键id的值,房间数据库根据这个值来更新你的记录。
您必须按照以下步骤更新您的代码:
Zakazi中的getId()获取自动生成的update.setOnClickListener记录的id OrderActivity.myAppDatabase.myDao().updateZakazi(zakazi);更新聊天室数据库中的记录
希望它能为你工作。
https://stackoverflow.com/questions/52130379
复制相似问题