2015-05-17 58 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(); 
       } 
      } 
     }); 
相关问题