2016-03-16 1 views
0

Я пытаюсь обновить запись в коллекции kinvey, но он продолжает говорить недостаточные учетные данные Я нашел аналогичный вопрос на форуме, который сказал, что мне нужно установитьGloballyWriteable в acl моей модели, которую я сделал что, но все еще есть ошибка вот мой кодне может обновить данные в базе данных Kinvey

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

Учитывая, что у вас есть пользователь правильно вошли в систему, это, кажется, связано с правами сбора.

Ваша коллекция находится в режиме общего доступа, поэтому вы можете прочитать объект заказа, созданный кем-то другим. Но, поскольку только создатель может изменить объект, вы получаете ошибку «недостаточных учетных данных».

У вас есть два варианта. Первый вариант - изменить права доступа к коллекциям, чтобы кто-либо мог редактировать любой объект заказа. Вы можете сделать это в веб-консоли Kinvey, перейдя на вкладку настроек в браузере данных для коллекции Order. После этого вам не нужно будет использовать setGloballyWriteable/setGloballyReadable.

Другой вариант (лучше подходящий по мне) - создать еще одну коллекцию для запросов на конкретные заказы. В этой новой коллекции вы сможете сохранить ссылку на объект заказа, а также сохранить информацию о пользователе, который запросил его.

Вы можете найти необходимую документацию, связанную с разрешениями коллекции здесь - http://devcenter.kinvey.com/android/guides/security

+0

благодарю вас очень много я не знаю, что я могу обновить его из kinvey консоли, но вы знаете, почему я не могу сделать только одну запись в моей базе данных общественности? почему setGlobalWritable не работает? –

+0

Поскольку коллекция была в режиме общего доступа, это будет работать только в том случае, если вы являетесь создателем этой записи. Если вы переключаетесь в общий режим, создайте заказ и попросите его (который будет запускать setGloballyWriteable) в этом порядке с тем же пользователем, он будет работать. –

Смежные вопросы