Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用云Firestore中的自定义对象_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

在Android中使用云Firestore中的自定义对象

在Android中使用云Firestore中的自定义对象,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我试图从Firestore中检索已存储的事件对象,并将其显示在活动中。我在文档引用中定位文档,然后使用setEvent方法将文档(转换为事件对象)设置为开始时声明的“thisEvent”变量 但是,当我使用事件中的信息设置TextView时,它不起作用,因为thisEvent为null。我已经设置了一个if/else来查看它是否为null,因此每次运行应用程序时,都不会显示事件,而是根据if语句显示事件标题。我已经按照他们网站上概述的Firestore文档进行了操作,但我似乎没有按照正确的方式进

我试图从Firestore中检索已存储的事件对象,并将其显示在活动中。我在文档引用中定位文档,然后使用setEvent方法将文档(转换为事件对象)设置为开始时声明的“thisEvent”变量

但是,当我使用事件中的信息设置TextView时,它不起作用,因为thisEvent为null。我已经设置了一个if/else来查看它是否为null,因此每次运行应用程序时,都不会显示事件,而是根据if语句显示事件标题。我已经按照他们网站上概述的Firestore文档进行了操作,但我似乎没有按照正确的方式进行操作

public class EventViewActivity extends AppCompatActivity {

//declaring FireBase variables
private FirebaseFirestore mFStore;
private FirebaseAuth mAuth;

//declaring user,team and event variables
private String user_id;
private String team_id;
private String TAG = "EventViewActivity";
String event_id;
Event thisEvent;

//declaring and binding UI elements
@BindView(R.id.event_title_text) TextView event_title;
@BindView(R.id.event_date_text)TextView event_date;
@BindView(R.id.event_time_text)TextView event_time;
@BindView(R.id.event_description_text)TextView event_description;
@BindView(R.id.event_location_text)TextView event_location;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_event_view);
    ButterKnife.bind(this);
    mAuth = FirebaseAuth.getInstance();
    mFStore = FirebaseFirestore.getInstance();
    Intent intent = getIntent();
    event_id = intent.getExtras().getString("event_id");
    Log.d(TAG, "eventid: " + event_id);

    //retrieve event information
    DocumentReference eventInfoRef = mFStore.collection("Teams/YfLa27NWaaQSfNwhZPgX/Events").document("MhEg0kRdJEedf7YnwvBi");
    eventInfoRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            setEvent(documentSnapshot.toObject(Event.class));
        }
    });
    if (thisEvent !=null){
    event_title.setText(this.thisEvent.getTitle());
    event_date.setText(thisEvent.getDate().toString());
    event_time.setText(thisEvent.getTime());
    event_description.setText(thisEvent.getDescription());
    event_location.setText(thisEvent.getLocation());}
    else {
        event_title.setText("HEY THERE");
    }
}

public void setEvent(Event event){
    this.thisEvent = event;
}
公共类EventViewActivity扩展了AppCompatActivity{
//声明FireBase变量
私人FirebaseFirestore mFStore;
私人消防队;
//声明用户、团队和事件变量
私有字符串用户标识;
私人字符串组id;
私有字符串标记=“EventViewActivity”;
字符串事件标识;
事件本事件;
//声明和绑定UI元素
@BindView(R.id.event_title_text)TextView event_title;
@BindView(R.id.event_date_text)TextView event_date;
@BindView(R.id.event_time_text)TextView event_time;
@BindView(R.id.event_description_text)TextView事件_description;
@BindView(R.id.event_location_text)TextView事件_location;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u event\u视图);
把(这个)绑起来;
mAuth=FirebaseAuth.getInstance();
mFStore=FirebaseFirestore.getInstance();
Intent=getIntent();
event_id=intent.getExtras().getString(“event_id”);
Log.d(标记“eventid:+事件id”);
//检索事件信息
DocumentReference eventInfoRef=mFStore.collection(“Teams/yfla27nwaqsfnwhzpgx/Events”).document(“MhEg0kRdJEedf7YnwvBi”);
eventInfoRef.get().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(文档快照文档快照){
setEvent(documentSnapshot.toObject(Event.class));
}
});
如果(thisEvent!=null){
event_title.setText(this.thisEvent.getTitle());
event_date.setText(thisEvent.getDate().toString());
event_time.setText(thisEvent.getTime());
event_description.setText(thisEvent.getDescription());
事件_location.setText(thisEvent.getLocation());}
否则{
event_title.setText(“你好”);
}
}
公共无效设置事件(事件){
this.thisEvent=事件;
}

}

您不能将类型为
Event
的变量声明为全局变量,而只是在
onSuccess()方法之外使用它。之所以会发生这种情况,是因为该方法具有异步行为,这意味着甚至在您从数据库获取数据之前就调用了该方法。一个快速解决方法是只在
onSuccess()
方法内部使用
事件
对象,或者如果您想在外部使用它,请使用我的回答的最后一部分。您也可以看看这个

非常感谢您的回答。我明白了第一部分,但很高兴看到还有另一种方法。我会看一看,以备将来参考!