2015-05-17 85 views
1

我正在做一個有2個用戶類型的管理員和普通用戶的Android應用程序管理員有能力控制解析數據庫編輯,添加和刪除,但我有一個關於刪除用戶的問題在這裏是我的代碼,但它不工作如何從android應用程序中刪除解析用戶?

final String userId = user.getUserId(); 
     ParseQuery<ParseUser> query = ParseUser.getQuery(); 
     query.whereEqualTo("objectid", userId); 

     query.getFirstInBackground(new GetCallback<ParseUser>() { 



      public void done(ParseUser object, ParseException e) { 
       // TODO Auto-generated method stub 
       try { 
        object.delete(); 
        Toast.makeText(getApplicationContext(), 
          "Successfully deleted Project"+userId, Toast.LENGTH_LONG).show(); 
        //prog.dismiss(); 

       } catch (ParseException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
      } 

     }); 

任何幫助將不勝感激THX

回答

5

的用戶不能從客戶端刪除其他用戶。它可以用Parse.Cloud.useMasterKey()的雲代碼完成。

(順便說一下,它看起來像發佈的代碼甚至沒有通過id獲取用戶。這將是原因,whereEqualTo("objectId", someObjectId)會找到一個對象,但解析提供了一種特殊的查詢形式,稱爲getInBackground()。 。See the doc for Parse.Query

編輯 - 在雲中的代碼,該功能會去是這樣的:

Parse.Cloud.define("deleteUserWithId", function(request, response) { 
    Parse.Cloud.useMasterKey(); 
    var userId = request.params.userId; 
    var query = new Parse.Query(Parse.User); 
    query.get(userId).then(function(user) { 
     return user.destroy(); 
    }).then(function() { 
     response.success(user); 
    }, function(error) { 
     response.error(error); 
    }); 
}); 

從客戶端(雖然我是一個Java業餘愛好者):

HashMap<String, String> params = new HashMap<String, String>(); 
params.put("userId", userId); 
ParseCloud.callFunctionInBackground("deleteUserWithId", params, new FunctionCallback<Float>() { 
    void done(Object result, ParseException e) { 
     if (e == null) { 
      // success 
     } 
    } 
}); 
+0

我不熟悉雲代碼我可以從android應用程序訪問嗎? –

+1

有一個小管理員可以完成設置。在這裏看到文檔。 https://parse.com/docs/android/guide#cloud-code。一旦你設置好了,你就可以推送javascript來解析在nodejs服務器上運行的哪些內容。有一個客戶端API可以通過名稱來調用您部署的功能。如果你願意,我可以發佈其中的一個。 – danh

+0

@GeorgesBadra - 這是否回答了這個問題? – danh

0

可以通過Parse Rest API訪問主密鑰。只需編寫一個解析雲代碼函數來刪除使用主密鑰的用戶,然後使用Parse Android API從管理員帳戶調用該函數。

1
ParseUser user = ParseUser.getCurrentUser(); 
     user.deleteInBackground(new DeleteCallback() { 
      @Override 
      public void done(com.parse.ParseException e) { 
       if (e == null) { 
        //user deleted 
       } else { 
        ccd.showDialog(mContext, e.getMessage()); 
        e.printStackTrace(); 
       } 
      } 
     }); 
相關問題