如何将用户添加到角色
How to add user to a role
我正在尝试在我的注册功能中为用户分配角色。
通过使用以下代码:
try {
role.save(new CloudRoleCallback() {
@Override
public void done(CloudRole cloudRole, CloudException t) throws CloudException {
if(cloudRole != null){
System.out.println("Adding user role"+ ""+ cloudRole.getRoleName());
userObj.addToRole(role, new CloudUserCallback() {
@Override
public void done(CloudUser cloudUser, CloudException e) throws CloudException {
if(cloudUser != null){
System.out.println("role in role added successfully");
}
if(e != null){
e.printStackTrace();
}
}
});
}
if( t != null){
t.printStackTrace();
}
}
});
}
userObj.signUp(new CloudUserCallback() {
@Override
public void done(CloudUser cloudUser, CloudException e) throws CloudException {
if (cloudUser != null) {
onSignupSuccess();
}
if (e != null) {
e.printStackTrace();
error = e.getMessage();
error = error.substring(error.indexOf(""));
onSignupFailed();
progressDialog.dismiss();
}
}
});
当我尝试 运行 上述代码时,出现以下错误。
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
Process: info, PID: 967
java.lang.RuntimeException: An error occured while executing
doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:300)
at
java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual
method 'int java.lang.String.length()' on a null object reference
at java.io.StringReader.(StringReader.java:47)
at io.cloudboost.json.JSONTokener.(JSONTokener.java:85)
at io.cloudboost.json.JSONObject.(JSONObject.java:324)
at io.cloudboost.CloudUser.addToRole(CloudUser.java:317)
at com.rakesh_kr.msrit_info.SignUp$signupClass.done(SignUp.java:149)
at io.cloudboost.CloudRole.save(CloudRole.java:83)
at
com.rakesh_kr.msrit_info.SignUp$signupClass.doInBackground(SignUp.java:144)
at
com.rakesh_kr.msrit_info.SignUp$signupClass.doInBackground(SignUp.java:126)
at android.os.AsyncTask.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
@Kr Rakesh 你的调用顺序是错误的,你实际上是在一个不存在的 User
上调用 addToRole
因为你 user.signUp
在顺序中稍后被调用。
你应该做的是这样的:
- 注册
- 在注册回调的
done
方法中创建并保存角色
- 在
role.save
回调的 done
方法中调用 addToRole
下面是我推荐的代码,大家可以摘叶子:
user.signUp(new CloudUserCallback() {
@Override
public void done(final CloudUser user1, CloudException e)
throws CloudException {
if (e != null)
e.printStackTrace();
else {
CloudRole role = new CloudRole(str);
role.save(new CloudRoleCallback() {
@Override
public void done(CloudRole x, CloudException t)
throws CloudException {
if (t != null)
t.printStackTrace();
else {
user1.addToRole(x, new CloudUserCallback() {
@Override
public void done(CloudUser user,
CloudException e)
throws CloudException {
if (e != null)
e.printStackTrace();
else {
System.out
.println("user added to role");
}
}
});
}
}
});
}
}
});
我正在尝试在我的注册功能中为用户分配角色。
通过使用以下代码:
try {
role.save(new CloudRoleCallback() {
@Override
public void done(CloudRole cloudRole, CloudException t) throws CloudException {
if(cloudRole != null){
System.out.println("Adding user role"+ ""+ cloudRole.getRoleName());
userObj.addToRole(role, new CloudUserCallback() {
@Override
public void done(CloudUser cloudUser, CloudException e) throws CloudException {
if(cloudUser != null){
System.out.println("role in role added successfully");
}
if(e != null){
e.printStackTrace();
}
}
});
}
if( t != null){
t.printStackTrace();
}
}
});
}
userObj.signUp(new CloudUserCallback() {
@Override
public void done(CloudUser cloudUser, CloudException e) throws CloudException {
if (cloudUser != null) {
onSignupSuccess();
}
if (e != null) {
e.printStackTrace();
error = e.getMessage();
error = error.substring(error.indexOf(""));
onSignupFailed();
progressDialog.dismiss();
}
}
});
当我尝试 运行 上述代码时,出现以下错误。
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 Process: info, PID: 967 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference at java.io.StringReader.(StringReader.java:47) at io.cloudboost.json.JSONTokener.(JSONTokener.java:85) at io.cloudboost.json.JSONObject.(JSONObject.java:324) at io.cloudboost.CloudUser.addToRole(CloudUser.java:317) at com.rakesh_kr.msrit_info.SignUp$signupClass.done(SignUp.java:149) at io.cloudboost.CloudRole.save(CloudRole.java:83) at com.rakesh_kr.msrit_info.SignUp$signupClass.doInBackground(SignUp.java:144) at com.rakesh_kr.msrit_info.SignUp$signupClass.doInBackground(SignUp.java:126) at android.os.AsyncTask.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818)
@Kr Rakesh 你的调用顺序是错误的,你实际上是在一个不存在的 User
上调用 addToRole
因为你 user.signUp
在顺序中稍后被调用。
你应该做的是这样的:
- 注册
- 在注册回调的
done
方法中创建并保存角色 - 在
role.save
回调的done
方法中调用addToRole
下面是我推荐的代码,大家可以摘叶子:
user.signUp(new CloudUserCallback() {
@Override
public void done(final CloudUser user1, CloudException e)
throws CloudException {
if (e != null)
e.printStackTrace();
else {
CloudRole role = new CloudRole(str);
role.save(new CloudRoleCallback() {
@Override
public void done(CloudRole x, CloudException t)
throws CloudException {
if (t != null)
t.printStackTrace();
else {
user1.addToRole(x, new CloudUserCallback() {
@Override
public void done(CloudUser user,
CloudException e)
throws CloudException {
if (e != null)
e.printStackTrace();
else {
System.out
.println("user added to role");
}
}
});
}
}
});
}
}
});