【问题标题】:How can I set the value from Firebase in EditText?如何在 EditText 中设置 Firebase 的值?
【发布时间】:2017-02-05 20:44:35
【问题描述】:

如何在 EditText 中设置值(名称)?

"users": [
    "-KTYWvZG4Qn9ZYTc47O6" : {


      "name" : "my name"
    }
}

我做到了,但是

package **.****;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import ****.****.m_Model.Update_user1;



public class Update_a  extends AppCompatActivity {


    private  EditText name111;
   private DatabaseReference mFirebaseDatabase;
    private FirebaseDatabase mFirebaseInstance;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.Update__activity);




        myname111 = (EditText) findViewById(R.id.editext2);
        mFirebaseInstance = FirebaseDatabase.getInstance();
   mFirebaseDatabase = mFirebaseInstance.getReference("users");
        String userId = mFirebaseDatabase.push().getKey();

        mFirebaseDatabase.child(userId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Update_user1 model = dataSnapshot.getValue(Update_user1.class);

             myname111.setText(model.getname());


            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }


        });




    }

Update_user1.class

package **.****.m_Model;



public class Update_user1 {


    public String name;


    public Update_user1() {
    }
    public Update_user1(String name) {
        this.name = name;


    }

    public String getname() {

        return name;
    }

但这不起作用

E/AndroidRuntime: FATAL EXCEPTION: main Process: *.******, PID: 14980 java.lang.NullPointerException:尝试调用虚拟 方法 java.lang.String ..m_Model.Update_user1.getname() 空对象引用 在 *.********.Update_u$1.onDataChange(Update_u.java:61)

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    当你运行这一行时:

      String userId = mFirebaseDatabase.push().getKey();
    

    您生成一个新的所谓推送 ID。接下来,您根据这个新创建的推送 ID 将侦听器附加到一个位置。

        mFirebaseDatabase.child(userId).addValueEventListener(new ValueEventListener() {
           ...
    

    由于推送 ID 在统计上保证是唯一的,因此该位置尚不存在任何值。

    这意味着onDataChange() 将触发一个空的DataSnapshot

            public void onDataChange(DataSnapshot dataSnapshot) {
                Update_user1 model = dataSnapshot.getValue(Update_user1.class);
    
                myname111.setText(model.getname());
            }
    

    由于DataSnapshot 为空,getValue() 将无法获得Update_user1,因此它将返回null。这导致model.getname()null 对象上调用getname(),从而抛出NullPointerException

    处理 null 最简单的方法是:

            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    Update_user1 model = dataSnapshot.getValue(Update_user1.class);
    
                    myname111.setText(model.getname());
                }
            }
    

    【讨论】:

      【解决方案2】:

      frank 的答案是正确的,因为您确实想要获取 id 的值还不存在,并且您必须在具有值的键上创建侦听器,这样您就不必知道它的 hashkey

      所以你可以按照以下方式制作

        mFirebaseDatabase.getReference("users")
                  .addValueEventListener(new ValueEventListener() {
                      @Override
                      public void onDataChange(DataSnapshot snapshot) {
                           Update_user1 model = dataSnapshot.getValue(Update_user1.class);
      
               myname111.setText(model.getname());
                      }
      
                      @Override
                      public void onCancelled(DatabaseError databaseError) {
                       // TODO
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多