2016-03-16 39 views
0

我正在嘗試更新kinvey集合中的記錄,但它始終沒有說明憑據不足 我在論壇上發現了一個類似的問題,表示我必須將我的模型的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

考慮到你有一個用戶正常登錄,這似乎涉及到收集權限。

您的收藏處於共享模式,這就是爲什麼您可以閱讀其他人創建的訂單對象。但是,因爲只有創建者才能修改對象,所以您會收到「證書不足」錯誤。

您有兩種選擇。第一個選項是將收集權限更改爲公共,以便任何人都可以編輯任何訂單對象。您可以通過轉到Order集合的數據瀏覽器中的設置選項卡,在Kinvey Web控制檯中執行此操作。在此之後,您將不需要使用setGloballyWriteable/setGloballyReadable。

其他選項(根據我的說法更合適)是爲特定訂單的請求創建另一個集合。在這個新的集合中,您將能夠存儲訂單對象的參考,並存儲關於請求它的用戶的用戶信息。

你可以找到與此集合權限必要的文件 - http://devcenter.kinvey.com/android/guides/security

+0

非常感謝你我不知道,我可以從kinvey控制檯更新,但你知道我爲什麼不能做紀錄只有一個在我的數據庫上市?爲什麼setGlobalWritable不起作用? –

+0

由於收藏處於共享模式,只有在您是該記錄的創建者時才能使用。如果您切換到共享模式,請創建一個訂單並嘗試使用同一個用戶請求該訂單(它將觸發setGloballyWriteable),它將起作用。 –