繁体   English   中英

从 Firebase 实时数据库检索数据后,在编辑文本中设置文本需要一些时间

[英]Setting Text in Edit Text takes time after retrieving data from Firebase Realtime Database

我有一个 Android 项目,我正在使用 Firebase 实时数据库来存储我的数据。

问题 - 我的活动中的 EditTexts 字段首先显示,然后当我的 EditTexts 填充有我从数据库中读取的数据时,会有大约 5 秒的时间间隔。

这是代码 -

private void updatePersonalInfo() {
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("resumeDataOfUser").child(userPhoneNumber).child("Personal Info");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
               map.put(snapshot.getKey().toString(),snapshot.getValue().toString());
            }
            if(!map.containsKey("linkedInUserName")){
                for( HashMap.Entry<String, String> entry : map.entrySet() ){
                    if(entry.getKey().equals("pincode")) mAddressPinCode.getEditText().setText(entry.getValue());
                    if(entry.getKey().equals("otherPhone")) mOtherPhoneNumber.getEditText().setText(entry.getValue());
                    if(entry.getKey().equals("city")) mAddressCity.getEditText().setText(entry.getValue());
                    if(entry.getKey().equals("name")) mFullName.getEditText().setText(entry.getValue());
                    if(entry.getKey().equals("state")) mAddressState.setText(entry.getValue());
                    if(entry.getKey().equals("email")) mEmail.getEditText().setText(entry.getValue());
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

这是数据库的结构 -

结构体

有什么方法可以加快这个过程,因为我不认为我将数据设置为相应的 EditTexts 的方法是最好和最快的方法。 任何帮助,将不胜感激。

我正在显示这样的数据

在此处输入图像描述

这取决于用户的 Internet 带宽。 使用进度圈对话框向用户显示一些交互式 UI。

我不知道您为什么将值和键放在map中,然后循环遍历它们,而您可以直接使用dataSnapshot轻松提取值:

private void updatePersonalInfo() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("resumeDataOfUser").child(userPhoneNumber).child("Personal Info");


reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

    //get values 
    String pinCode = dataSnapshot.child("pincode").getValue(String.class);
    String otherPhone = dataSnapshot.child("otherPhone").getValue(String.class);
    String city = dataSnapshot.child("city").getValue(String.class);
    String name = dataSnapshot.child("name").getValue(String.class);
    String state = dataSnapshot.child("state").getValue(String.class);
    String email = dataSnapshot.child("email").getValue(String.class);

    //set the values
    mAddressPinCode.getEditText().setText(pinCode);
    mOtherPhoneNumber.getEditText().setText(otherPhone);
    mAddressCity.getEditText().setText(city);
    mFullName.getEditText().setText(name);
    mAddressState.getEditText().setText(state);
    mEmail.getEditText().setText(email);




    }
    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

       }
    });
 }

我认为这取决于用户的互联网速度。 您需要显示一个进度对话框 UI 以提醒用户在从 firebase 加载数据时请稍候。

进度对话框

暂无
暂无

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

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