无法更新 Kinvey 数据库中的数据
can not update Data in Kinvey Database
我正在尝试更新 kinvey 集合中的记录,但它一直说凭据不足
我在论坛上发现了一个类似的问题,说我必须将 setGlobalWriteable 设置为我的模型的 acl 我已经这样做了,但仍然有错误
这是我的代码
public void loadMenuHelper(){
menu_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Order order = my_orders[position];
order.getAcl().setGloballyWriteable(true);
order.getAcl().setGloballyReadable(true);
int requests = order.getRequests();
////////////have the handler
AlertDialog.Builder alert = new AlertDialog.Builder(
new ContextThemeWrapper(ImageTargets.this, R.style.AlertDialogCustom));
LinearLayout layout = new LinearLayout(ImageTargets.this);
layout.setOrientation(LinearLayout.VERTICAL);
alert.setTitle("There are " + requests + "Before you");
alert.setView(layout);
alert.setPositiveButton("Create", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
///////////////
order.getAcl().setGloballyWriteable(true);
order.getAcl().setGloballyReadable(true);
order.setRequests(order.getRequests() + 1);
AsyncAppData<Order> myevents = mKinveyClient.appData("Order", Order.class);
myevents.save(order, new KinveyClientCallback<Order>() {
@Override
public void onFailure(Throwable e) {
Log.i("TAG", "failed to save event data" + e.getMessage());
Log.i("TAG", sharedpreferences.getString("owner_name", ""));
}
@Override
public void onSuccess(Order r) {
Log.d("TAG", "saved data for entity " + r.getName());
Toast.makeText(getApplicationContext(), "Your Order was Created Sucessfully", Toast.LENGTH_SHORT).show();
}
});
}
////////////
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// what ever you want to do with No option.
}
});
alert.show();
////////////////
}
});
///////////////
}
考虑到您有一个正确登录的用户,这似乎与 collection 权限有关。
您的 collection 处于共享模式,这就是为什么您能够阅读其他人创建的订单 object 的原因。但是,因为只有创建者可以修改 object,您会收到 "insufficient credentials" 错误。
这里有两种选择。第一个选项是将 collection 权限更改为 public,以便任何人都可以编辑任何订单 object。您可以在 Kinvey Web 控制台中执行此操作,方法是转到数据浏览器中的设置选项卡以获取订单 collection。在此之后,您将不需要使用 setGloballyWriteable/setGloballyReadable.
其他选项(对我来说更合适)是为特定订单的请求创建另一个 collection。在这个新 collection 中,您将能够存储订单的引用 object 以及有关请求它的用户的用户信息。
您可以在此处找到与 collection 权限相关的必要文档 - http://devcenter.kinvey.com/android/guides/security
我正在尝试更新 kinvey 集合中的记录,但它一直说凭据不足 我在论坛上发现了一个类似的问题,说我必须将 setGlobalWriteable 设置为我的模型的 acl 我已经这样做了,但仍然有错误 这是我的代码
public void loadMenuHelper(){
menu_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Order order = my_orders[position];
order.getAcl().setGloballyWriteable(true);
order.getAcl().setGloballyReadable(true);
int requests = order.getRequests();
////////////have the handler
AlertDialog.Builder alert = new AlertDialog.Builder(
new ContextThemeWrapper(ImageTargets.this, R.style.AlertDialogCustom));
LinearLayout layout = new LinearLayout(ImageTargets.this);
layout.setOrientation(LinearLayout.VERTICAL);
alert.setTitle("There are " + requests + "Before you");
alert.setView(layout);
alert.setPositiveButton("Create", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
///////////////
order.getAcl().setGloballyWriteable(true);
order.getAcl().setGloballyReadable(true);
order.setRequests(order.getRequests() + 1);
AsyncAppData<Order> myevents = mKinveyClient.appData("Order", Order.class);
myevents.save(order, new KinveyClientCallback<Order>() {
@Override
public void onFailure(Throwable e) {
Log.i("TAG", "failed to save event data" + e.getMessage());
Log.i("TAG", sharedpreferences.getString("owner_name", ""));
}
@Override
public void onSuccess(Order r) {
Log.d("TAG", "saved data for entity " + r.getName());
Toast.makeText(getApplicationContext(), "Your Order was Created Sucessfully", Toast.LENGTH_SHORT).show();
}
});
}
////////////
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// what ever you want to do with No option.
}
});
alert.show();
////////////////
}
});
///////////////
}
考虑到您有一个正确登录的用户,这似乎与 collection 权限有关。
您的 collection 处于共享模式,这就是为什么您能够阅读其他人创建的订单 object 的原因。但是,因为只有创建者可以修改 object,您会收到 "insufficient credentials" 错误。
这里有两种选择。第一个选项是将 collection 权限更改为 public,以便任何人都可以编辑任何订单 object。您可以在 Kinvey Web 控制台中执行此操作,方法是转到数据浏览器中的设置选项卡以获取订单 collection。在此之后,您将不需要使用 setGloballyWriteable/setGloballyReadable.
其他选项(对我来说更合适)是为特定订单的请求创建另一个 collection。在这个新 collection 中,您将能够存储订单的引用 object 以及有关请求它的用户的用户信息。
您可以在此处找到与 collection 权限相关的必要文档 - http://devcenter.kinvey.com/android/guides/security