Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获得';E/AndroidRuntime:错误报告崩溃android.os.TransactionTooLargeException';单击AlertDialog的肯定按钮时_Java_Android_Facebook Graph Api_Firebase_Facebook Android Sdk - Fatal编程技术网

Java 获得';E/AndroidRuntime:错误报告崩溃android.os.TransactionTooLargeException';单击AlertDialog的肯定按钮时

Java 获得';E/AndroidRuntime:错误报告崩溃android.os.TransactionTooLargeException';单击AlertDialog的肯定按钮时,java,android,facebook-graph-api,firebase,facebook-android-sdk,Java,Android,Facebook Graph Api,Firebase,Facebook Android Sdk,我得到了这个错误: E/AndroidRuntime: Error reporting crash android.os.TransactionTooLargeException 这也是: java.lang.StackOverflowError: stack size 8MB 在以下给定代码下运行时: mAuthListener = new FirebaseAuth.AuthStateListener() { @Override

我得到了这个错误:

E/AndroidRuntime: Error reporting crash android.os.TransactionTooLargeException
这也是:

java.lang.StackOverflowError: stack size 8MB
在以下给定代码下运行时:

    mAuthListener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                    final FirebaseUser user = firebaseAuth.getCurrentUser();
                    if (user != null) {
                        // User is signed in

                        if (isFacebookLoggedIn()) {

                            if (dialog == null) {

                                final AlertDialog.Builder builder = new AlertDialog.Builder(SignUpActivity.this);

                                LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                View alertDialogView = inflater.inflate(R.layout.choose_unique_name_dialog, null);
                                uniqueUserName = (EditText) alertDialogView.findViewById(R.id.uniqueUserName);
                                usernameChoosen = (TextView) alertDialogView.findViewById(R.id.usernameChoosen);
                                usernameWarning = (TextView) alertDialogView.findViewById(R.id.usernameWarning);

                                usernameChoosen.setVisibility(View.INVISIBLE);
                                usernameWarning.setVisibility(View.INVISIBLE);

                                builder.setTitle("Choose a unique username");
                                builder.setView(alertDialogView);
                                builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int i) {

                                    }
                                });
                                dialog = builder.create();
                            }
                            dialog.show();
                            dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    wantToCloseDialog = false;
                                    //Do stuff, possibly set wantToCloseDialog to true then...
                                    if (uniqueUserName.getText().toString().isEmpty()) {

                                        Toast.makeText(getBaseContext(), "Please choose a unique username", Toast.LENGTH_LONG).show();
                                        wantToCloseDialog = false;
                                    } else {

                                        mDatabase.child("unique-usernames").addValueEventListener(new ValueEventListener() {
                                            @Override
                                            public void onDataChange(DataSnapshot dataSnapshot) {
                                                if (dataSnapshot.getValue() != null) {
                                                    if (dataSnapshot.getValue().toString().contains(uniqueUserName.getText().toString())) {
                                                        Toast.makeText(getBaseContext(), uniqueUserName.getText().toString() + " is already taken", Toast.LENGTH_LONG).show();
                                                        usernameChoosen.setText(uniqueUserName.getText().toString());
                                                        wantToCloseDialog = false;
                                                    } else {

                                                        // error is happening on execution of this code

                                                        Log.d("signedIn", "onAuthStateChanged:signed_in:" + user.getUid());
                                                        mDatabase.child("users").child(user.getUid()).child("name").setValue(user.getDisplayName());
                                                        mDatabase.child("users").child(user.getUid()).child("imageUID").setValue(user.getPhotoUrl());
                                                        mDatabase.child("users").child(user.getUid()).child("uniqueUserName").setValue(uniqueUserName.getText().toString());
                                                        mDatabase.child("users").child(user.getUid()).child("followers").setValue("00");
                                                        mDatabase.child("users").child(user.getUid()).child("following").setValue("00");
                                                        mDatabase.child("unique-usernames").child(ts).setValue(uniqueUserName.getText().toString());
                                                        Intent mainIntent = new Intent(SignUpActivity.this, SplashActivity.class);
                                                        mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                                        mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                                        startActivity(mainIntent);
                                                        progressDialog.setMessage("Signing up...");
                                                        progressDialog.setCancelable(false);
                                                        progressDialog.show();
                                                        wantToCloseDialog = true;
                                                    }
                                                } else {
                                                    Log.d("signedIn", "onAuthStateChanged:signed_in:" + user.getUid());
                                                    mDatabase.child("users").child(user.getUid()).child("name").setValue(user.getDisplayName());
                                                    mDatabase.child("users").child(user.getUid()).child("imageUID").setValue(user.getPhotoUrl());
                                                    mDatabase.child("users").child(user.getUid()).child("uniqueUserName").setValue(uniqueUserName.getText().toString());
                                                    mDatabase.child("users").child(user.getUid()).child("followers").setValue("00");
                                                    mDatabase.child("users").child(user.getUid()).child("following").setValue("00");
                                                    mDatabase.child("unique-usernames").child(ts).setValue(uniqueUserName.getText().toString());
                                                    Intent mainIntent = new Intent(SignUpActivity.this, SplashActivity.class);
                                                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                                    startActivity(mainIntent);
                                                    progressDialog.setMessage("Signing up...");
                                                    progressDialog.setCancelable(false);
                                                    progressDialog.show();
                                                    wantToCloseDialog = true;
                                                }
                                            }
                                            @Override
                                            public void onCancelled(DatabaseError databaseError) {
                                                Snackbar snackbar = Snackbar
                                                        .make(coordinatorLayout, databaseError.getMessage(), Snackbar.LENGTH_LONG);
                                                snackbar.show();
                                                wantToCloseDialog = false;
                                            }
                                        });
                                    }
                                    if(wantToCloseDialog)
                                        dialog.dismiss();
                                    //else dialog stays open. Make sure you have an obvious way to close the dialog especially if you set cancellable to false.
                                }
                            });
                        } else {

                            Log.d("signedIn", "onAuthStateChanged:signed_in:" + user.getUid());
                            mDatabase.child("users").child(user.getUid()).child("name").setValue(userName.getText().toString());
                            mDatabase.child("users").child(user.getUid()).child("uniqueUserName").setValue(uniqueUserName.getText().toString());
                            mDatabase.child("users").child(user.getUid()).child("followers").setValue("00");
                            mDatabase.child("users").child(user.getUid()).child("following").setValue("00");
                            mDatabase.child("unique-usernames").child(ts).setValue(uniqueUserName.getText().toString());
                            Intent mainIntent = new Intent(SignUpActivity.this, SplashActivity.class);
                            mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(mainIntent);
                            progressDialog.dismiss();

                        }
                    } else {
                        // User is signed out
                        Log.d("signedOut", "onAuthStateChanged:signed_out");
                    }
                    // ...
                }
            };
我以前从未见过这样的错误,这就是为什么我不知道这里发生了什么


请让我知道是什么导致了这个错误

您正在为节点添加侦听器
mDatabase.child(“唯一用户名”)
。然后,在该侦听器的
onDataChange()
回调中,修改同一节点的子节点:

mDatabase.child("unique-usernames").child(ts).setValue(uniqueUserName.getText().toString());

这会导致侦听器回调再次启动,导致无休止的循环。

在深入研究代码至少10-12次后,我发现了这个问题

解决方案是在这行代码中添加
.toString()
user.getPhotoUrl()
mDatabase.child(“用户”).child(user.getUid()).child(“imageUID”).setValue(user.getPhotoUrl())

这个回答给了我一点提示。谢谢


所以,现在已经解决了

对话框上的肯定按钮有两个OnClick侦听器。这可能是导致错误的原因。删除其中一个可能没有帮助:/谢谢,但你的回答是:帮了我一点忙。