如何在EditText中设置Firebase的值?

时间:2017-02-05 20:44:36

标签: android firebase firebase-realtime-database

如何在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:主程序: *。******,PID:   14980 java.lang.NullPointerException:尝试调用虚拟   方法java.lang.String .m_Model.Update_user1.getname()   null对象引用                                 at * 。********。Update_u $ 1.onDataChange(Update_u.java:61)

2 个答案:

答案 0 :(得分:2)

当您运行此行时:

  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()getname()对象上调用null,从而抛出NullPointerException

处理null的最简单方法是:

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

                myname111.setText(model.getname());
            }
        }

答案 1 :(得分:0)

frank的答案是正确的,因为你真的想要获取id的值还不存在,你必须在具有值的键上创建监听器,这样你就不必知道它的hashkey < / p>

所以你可以按照以下方式进行

def set_color(row):
    if row["Set"] == "Z":
        return "red"
    else:
        return "green"

df = df.assign(color=df.apply(set_color, axis=1))

print(df)