如何在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)
答案 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)