任何更改后的 Android Firebase 数据库活动/片段正在关闭

Posted

技术标签:

【中文标题】任何更改后的 Android Firebase 数据库活动/片段正在关闭【英文标题】:Android after any changes Firebase Database activity/fragment is closing 【发布时间】:2019-07-29 20:36:01 【问题描述】:

我开发了一个 android 应用程序,并使用 Firebase 进行身份验证、数据库和存储。在我的应用程序中有导航视图,并且有 5 6 个片段。例如,有一个配置文件片段,用户可以在其中更改个人信息,但保存按钮后配置文件片段崩溃并且应用程序返回 HomePageActivity。在活动中上传图片也存在同样的问题。用户上传一些伤口照片,来自一个活动,从一个片段到达。但是,在将照片上传到存储并将信息发送到数据库后,活动崩溃并且应用程序返回 HomePageActivty。我同时使用了 addValueEventListener 和 addListenerForSingleValueEvent,但问题没有解决。你可以帮帮我吗? 这是一个例子:

 btnSave.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            save();
            bringInfo();
            Toast.makeText(ProfilActivity.this,"Info changes is saved.",Toast.LENGTH_LONG).show();
        
    );

 private void save() 

        myRef.child("kullanicilar").child(firebaseUser.getUid())
                .addListenerForSingleValueEvent(new ValueEventListener() 
                                                    @Override
                                                    public void onDataChange(DataSnapshot dataSnapshot) 
                                                        Map<String, Object> postValues = new HashMap<String,Object>();
                                                        for (DataSnapshot snapshot : dataSnapshot.getChildren()) 
                                                            postValues.put(snapshot.getKey(),snapshot.getValue());
                                                        
                                                        postValues.put("ad", (etNameH.getText().toString()).substring(0,1).toUpperCase()+(etNameH.getText().toString()).substring(1));
                                                        postValues.put("soyad", (etSurnameH.getText().toString()).substring(0,1).toUpperCase()+(etSurnameH.getText().toString()).substring(1));
                                                        postValues.put("hastane", etCalistigiKurumPr.getText().toString());
                                                        myRef.child("kullanicilar").child(firebaseUser.getUid()).updateChildren(postValues);
                                                    

                                                    @Override
                                                    public void onCancelled(DatabaseError databaseError) 
                                                
                );

 private void bringInfo() 

    myRef.child("kullanicilar")
            .child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
            if (dataSnapshot.exists()) 
                user = dataSnapshot.getValue(Users.class);
                etNameH.setText(user.getAd());
                etSurnameH.setText(user.getSoyad());
                etCalistigiKurumPr.setText(user.getHastane());
            
        
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 
        
    );

【问题讨论】:

请贴出相关代码和错误日志。如需更多帮助,请参阅How to Ask。 代码太长,无法共享。没有错误日志。我无法解决这个问题 如果发生crash,很有可能有错误日志;检查logcat。我们不可能在没有看到任何代码的情况下帮助诊断您的问题。请发帖minimal reproducible example。 实际上这个问题并不总是出现,有些时候活动崩溃了有些时候没有。 是异步任务的问题吗? 【参考方案1】:

从 btnSave 中删除调用 bringInfo()。 OnClickListner 方法并放在 onDataChange 方法下试试这个

public void onClick(View v) 
    save();
    // bringInfo() remove from here
    Toast.makeText(ProfilActivity.this,"Info changes is
            saved.",Toast.LENGTH_LONG).show();


public void onDataChange(DataSnapshot dataSnapshot) 
//        *****Remaining Code*****
    bringInfo() put it here

【讨论】:

以上是关于任何更改后的 Android Firebase 数据库活动/片段正在关闭的主要内容,如果未能解决你的问题,请参考以下文章

关闭 Firebase 上的实时更改 (Android)

Android Firebase Job Dispatcher 会通过更改日期时间触发吗?

Android Firebase 字典键更改大小写

如何在android中更改firebase用户[重复]

更改 Firebase 数据库

如何在 Android 的 Firebase 身份验证中更改登录电话号码?