1

サインアップ機能でユーザーにロールを割り当てようとしています。

以下のコードを使用して:

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 プロセス: info、PID: 967 java.lang.RuntimeException: Android.os.AsyncTask$3.done(AsyncTask.java:300) で doInBackground() を実行中にエラーが発生しました。 util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) で java.util.concurrent.FutureTask.setException(FutureTask.java:222) で java.util.concurrent.FutureTask.run(FutureTask.java:242) android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) で java.util.concurrent.ThreadPoolExecutor$Worker.run( java.lang.Thread.run(Thread.java:818) の ThreadPoolExecutor.java:587) 原因: java.lang.NullPointerException: 仮想メソッド 'int java.lang.String.length()' を呼び出そうとしていますio.cloudboost.json.JSONTokener.(JSONTokener.java:85) の java.io.StringReader.(StringReader.java:47) の null オブジェクト参照 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.FutureTask.run(FutureTask.java:237) で android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) で 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)

4

1 に答える 1

0

@Kr Rakesh呼び出しのシーケンスが間違っています。シーケンスの後半で呼び出されるため、本質的に存在しないものを呼び出してaddToRoleいます。 あなたがすべきことは次のようなものです:Useruser.signUp

  1. サインアップ
  2. doneサインアップ コールバックのメソッドでロールを作成して保存する
  3. コールバックのメソッドaddToRole内で呼び出すdonerole.save

以下は私が提案するコードです。葉を選ぶことができます:

            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");
                                        }

                                    }
                            });
                        }

                    }
                });
            }

        }
    });
于 2016-04-05T08:42:15.350 に答える