无法更新Kinvey数据库中的数据

时间:2016-03-16 23:56:02

标签: android kinvey

我正在尝试更新kinvey集合中的记录,但它一直在说不足够的凭据 我在论坛上发现了一个类似的问题,说我必须将setGloballyWriteable设置为我的模型的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();
            ////////////////

        }
    });
    ///////////////
}

1 个答案:

答案 0 :(得分:1)

考虑到用户已正确登录,这似乎与收集权限有关。

您的收藏集处于共享模式,这就是您能够阅读其他人创建的订单对象的原因。但是,因为只有创建者可以修改对象,所以您的“凭据不足”错误。

这里有两种选择。第一个选项是将集合权限更改为public,以便任何人都可以编辑任何订单对象。您可以通过转到Order集合的数据浏览器中的设置选项卡,在Kinvey Web控制台中执行此操作。在此之后,您将不需要使用setGloballyWriteable / setGloballyReadable。

其他选项(根据我更适合)是为特定订单的请求创建另一个集合。在这个新的集合中,您将能够存储订单对象的引用,以及存储有关请求它的用户的用户信息。

您可以在此处找到与收集权限相关的必要文档 - http://devcenter.kinvey.com/android/guides/security