繁体   English   中英

使用MVP登录时获取TransactionTooLargeException

getting TransactionTooLargeException when sign in using MVP

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在我的应用程序中使用MVP我遇到错误

Error reporting crash
    android.os.TransactionTooLargeException: data parcel size 1052448 bytes

我知道这个问题以前曾提出过,但其他解决方案对我不起作用。 我的活动是使用Google登录按钮将用户登录到Firebase

这是演示者代码:

View view;
    private final static int RC_SIGN_IN = 2;

    //TODO : try to find a way to edit this use
    FirebaseUser currentUser;

    GoogleApiClient  mGoogleApiClient;

    public GeneralSignActivityPresenter(View view){
        this.view = view;
    }

    public void signInWithGoogle(String requestIdToken) {

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(requestIdToken)
                .requestEmail()
                .build();
        if(mGoogleApiClient == null || !mGoogleApiClient.isConnected()){
             mGoogleApiClient = new GoogleApiClient.Builder((Context) view)//TODO : check this context, TODO : check why this variable isn't used
                .enableAutoManage((FragmentActivity) view, new GoogleApiClient.OnConnectionFailedListener() {//TODO : check this casting
                    @Override
                    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                        view.onGoogleConnectionFailed();
                        Log.v("Logging", "connection result is : " + connectionResult.toString());
                    }
                })
                .addApi(Auth.GOOGLE_SIGN_IN_API)
                .build();
        }
        GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient((Context) view, gso);//TODO : check this context

        Intent signInIntent = mGoogleSignInClient.getSignInIntent();

        view.startSignIntent(signInIntent);
    }

    public void navigate(final String userType) {
        currentUser = FirebaseAuth.getInstance().getCurrentUser();
        String currentUserUid = currentUser.getUid();
        final DatabaseReference usersReference = FirebaseDatabase.getInstance().getReference("users");
        final DatabaseReference currentUserReference =  usersReference.child(currentUserUid);
        usersReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (!dataSnapshot.child(currentUser.getUid()).exists()) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("userName", currentUser.getDisplayName());
                    map.put("userImage", currentUser.getPhotoUrl());
                    map.put("userEmail", currentUser.getEmail());
                    map.put("points", 0);
                    map.put("acceptedQuestions", 0);
                    map.put("refusedQuestions", 0);
                    map.put("acceptedLessons", 0);
                    map.put("refusedLessons", 0);
                    map.put("userType", userType);
                    usersReference.child(currentUser.getUid()).setValue(map);
                }
                else {
                    //TODO : check if this part is working or no
                    currentUserReference.child("userName").setValue(currentUser.getDisplayName());
                    currentUserReference.child("userImage").setValue(currentUser.getPhotoUrl());
                    currentUserReference.child("userType").setValue(userType);
                }
                view.goToMainActivity();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    public void checkCurrentUser(){
        if (currentUser != null) {
           view.goToMainActivity();
        }
    }

    public interface View {
        void onGoogleConnectionFailed();

这是活动代码:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_general_sign);
        ButterKnife.bind(this);
        FirebaseApp.initializeApp(this);
        presenter = new GeneralSignActivityPresenter(this);
        button = findViewById(R.id.googleBtn);
        userTypesSpinner = findViewById(R.id.userTypesSpinner);
        unStudentSignAlertText = findViewById(R.id.unStudentSignAlertText);


        ArrayAdapter<CharSequence> userTypesAdapter = ArrayAdapter.createFromResource(this,
                R.array.user_types_array, android.R.layout.simple_spinner_item);
        userTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        userTypesSpinner.setAdapter(userTypesAdapter);

        userTypesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                userType = adapterView.getItemAtPosition(i).toString();
                if (userType.equals("طالب")) {
                    unStudentSignAlertText.setVisibility(View.GONE);
                } else {
                    unStudentSignAlertText.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

       /* mCallbackManager = CallbackManager.Factory.create();
        LoginButton loginButton = findViewById(R.id.facebookBtn);
        loginButton.setReadPermissions("email", "public_profile");
        loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d(TAG, "facebook:onSuccess:" + loginResult);
                Toast.makeText(GeneralSignActivity.this, "onSuccess" + loginResult, Toast.LENGTH_SHORT).show();
                handleFacebookAccessToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
                Log.d(TAG, "facebook:onCancel");
                Toast.makeText(GeneralSignActivity.this, "onCancel" , Toast.LENGTH_SHORT).show();

                // ...
            }

            @Override
            public void onError(FacebookException error) {
                Log.d(TAG, "facebook:onError", error);
                Toast.makeText(GeneralSignActivity.this, "onError : " + error, Toast.LENGTH_SHORT).show();

                // ...
            }
        });*/

// ...


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                presenter.signInWithGoogle(getString(R.string.default_web_client_id));
            }
        });

        mCallbackManager = CallbackManager.Factory.create();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                // Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = task.getResult(ApiException.class);
                AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
                auth.signInWithCredential(credential)
                        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                if (task.isSuccessful()) {
                                    // Sign in success, update UI with the signed-in user's information
                                    presenter.navigate(userType);
                                } else {
                                    // If sign in fails, display a message to the user.
                                    Toast.makeText(GeneralSignActivity.this, "فشل التسجيل في التطبيق قد يكون لديك مشكلة في الإتصال بالانترنت أو أن إدارة البرنامج قامت بإلغاء تفعيل حسابك", Toast.LENGTH_SHORT).show();
                                    //updateUI(null);
                                }

                                // ...
                            }
                        });

                //Toast.makeText(this, "نجح تسجيل الدخول",Toast.LENGTH_SHORT).show();
            } catch (ApiException e) {
                Toast.makeText(GeneralSignActivity.this, "حدث خطأ أثناء محاولة التسجيل برجاء اعادة المحاولة", Toast.LENGTH_SHORT).show();

            }
        }//TODO
           // mCallbackManager.onActivityResult(requestCode, resultCode, data);

    }

    @Override
    public void onStart() {
        super.onStart();
        //TODO : note : don't try to update the users data here again
        presenter.checkCurrentUser();
    }

    @Override
    public void onGoogleConnectionFailed() {
        Toast.makeText(GeneralSignActivity.this, "حدث خطأ برجاء إعادة المحاولة", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void goToMainActivity() {
        startActivity(new Intent(GeneralSignActivity.this, MainActivity.class));
    }

    @Override
    public void startSignIntent(Intent signInIntent) {
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

            void goToMainActivity();

            void startSignIntent(Intent signInIntent);
        }

我为解决该错误做了很多尝试,但是我没有在两个类之间发送大数据,所以我不知道是什么问题。

问题暂未有回复.您可以查看右边的相关问题.
2 拍照时 TransactionTooLargeException

当我创建启动相机应用程序拍照的意图时,我的应用程序出现问题,我的应用程序崩溃并收到以下错误: 在相机应用程序中拍摄并返回到我的应用程序后,照片将保存在 Room 数据库中。 有趣的是,只有在我尝试添加/替换照片的数据库行中已经保存了一张照片时,才会出现问题。 创建新行或在没有图片的行中拍摄照片时 ...

3 startActivityForResult时出现TransactionTooLargeException

我有一个Android应用程序,该应用程序在具有1GB RAM的设备中出现故障。 使用startActivityForResult打开活动时,出现了TransactionTooLargeException startActivityForResult 。 如果将它们更改为startAct ...

2019-05-17 18:15:42 1 48   android
7 使用MVP模式的Android登录实现

我需要使用Model-View-Presenter(MVP)模式在我的应用程序中实现facebook登录,但问题实际上是如何避免向我的演示者注入一个Activity的引用(这将取消MVP模式,因为演示者不应该包含平台组件)。 LoginManager.getInstance().logInW ...

8 Java:使用MVP模型的登录屏幕

我目前正在尝试使用Java中的MVP模型制作“登录”屏幕。 我尝试制作一个网格(javafx.scene.layout.GridPane),然后将其放置在BorderPane中以形成美观的布局。 但是在运行代码时,屏幕仍然为空。 我只有一个带有标题的屏幕。 这是我的代码:1.视图 ...

9 使用 FragmentStatePagerAdapter 并启动新活动时发生 TransactionTooLargeException

这实际上是一个源于其他地方的问题,但我已将其缩小到以下场景。 在我的 MainActivity 中,我使用 ViewPager 在底部有三个选项卡来交换我的三个片段。 如果我在移动到任何 Fragment 后单击一个按钮移动到一个新的 Activity,我会收到以下错误: 但是,如果我在 Vie ...

10 android.os.TransactionTooLargeException 使用巨型回收视图时

我的主要活动有时会遇到这个烦人的异常。 堆栈跟踪是这样的: 跟踪本身不是很有帮助,因为它没有指定哪个组件或哪个事务 Id 或标签与异常相关(谷歌请考虑你在那里发布的废话的可调试性)......但我怀疑它是我在主要活动中的回收视图。 这个回收视图可能会超载,成千上万的项目。 它们每个都包含:3 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM