我正试图在注册函数中为用户分配一个角色。
通过使用以下代码:
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:致命异常:AsyncTask#2进程:信息,PID:967java.lang.RuntimeException:执行时出错doInBackground()在android.os.AsyncTask$3.done(AsyncTask.java:300)在java.util.concurrent.FFutureTask.finishCompletion(FutureTask.java:355)位于java.util.concurrent.FFutureTask.setException(FutureTask.java:222)位于java.util.concurrent.FFutureTask.run(FutureTask.java:242)在android.os.AsyncTask$SerialExecutor$1.run上(AsyncTask.java:231)在java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1112)在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)在java.lang.Thread.run(线程.java:818)由以下原因引起:java.lang.NullPointerException:尝试调用虚拟null对象引用上的方法"int java.lang.String.length()"位于java.io.StringReader.(StringReader.java:47)位于io.cloudboost.json.JSONTokener.(JSONTokeer.java:85)位于io.cloudboost.json.JSONObject.(JSONObject.java:324)位于io.cloudboost.CloudUser.addToRole(CloudUser.java:317)网址:com.rakesh_kr.msrit_info.SignUp$signupClass$1.done(SignUp.java:149)位于io.cloudboost.CloudRole.save(CloudRole.java:83)在com.rakesh_kr.msrit_info.SignUp$signupClass.doInBackground(SignUp.java:144)在com.rakesh_kr.msrit_info.SignUp$signupClass.doInBackground(SignUp.java:126)在android.os.AsyncTask$2.call上(AsyncTask.java:288)位于java.util.concurrent.FFutureTask.run(FutureTask.java:237)在android.os.AsyncTask$SerialExecutor$1.run上(AsyncTask.java:231)在java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1112)在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)在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");
}
}
});
}
}
});
}
}
});