如果 getIntent 为 null,则 Firebase

If getIntent is null Firebase

提问人:Muratcan Yıldız 提问时间:6/11/2022 最后编辑:Muratcan Yıldız 更新时间:6/12/2022 访问量:96

问:

我在我的应用程序中使用 firebase 实时数据库。如果我使用 Intent 发送的数据为空,则应用程序将关闭。如果 intent 中的数据为空,如何连接数据库并拉取数据?

String post_title ;

post_title = getIntent().getExtras().get("post_title").toString();
txttitle.setText(post_title);

如果post_title为null,我希望它这样做:

databaseReference = FirebaseDatabase.getInstance().getReference().child("AllPost").child(PostKey);

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.hasChild("title")){                          
            String title  = dataSnapshot.child("title").getValue().toString();
                          
            txttitle.setText(title);
        }

日志:enter image description here

日志:enter image description here

我试过这个:

  if (post_title == null || post_title.isEmpty()) {
            databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    if (snapshot.hasChild("title")) {
                        String title = snapshot.child("title").getValue().toString();

                        txttitle.setText(title);
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });
        } else {
            
            txttitle.setText(post_title);
           
        }
Android Firebase Firebase-realtime-database android-intent nullpointerexception

评论

0赞 darshan 6/11/2022
你试过做吗if (post_title == null || post_title.isEmpty()) { /* do firebase operations */}
0赞 Frank van Puffelen 6/11/2022
当应用关闭时,它通常会崩溃,并在发生这种情况时将错误消息和堆栈跟踪写入其 logcat。请找到这些,并通过单击其下方的链接将它们添加到您的问题中。另请参阅 stackoverflow.com/questions/23353173/... 和 stackoverflow.com/questions/3988788/...edit
0赞 Alex Mamo 6/11/2022
请编辑您的问题并添加弗兰克要求的信息,并请回复@。
0赞 Muratcan Yıldız 6/11/2022
是的,我试过了。它再次给出了相同的错误。我添加了日志@FrankvanPuffelen
0赞 Alex Mamo 6/11/2022
这是不完整的。请编辑您的问题并添加整个错误消息和堆栈跟踪。

答:

0赞 Tyler V 6/12/2022 #1

你的问题出在这一行

post_title = getIntent().getExtras().get("post_title").toString();

当“post_title”不存在时,返回 null。然后,由于调用了它,因此会收到 NullPointerException。您也可以在错误消息中看到这一点get("post_title")toString()

Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object

解决此问题的方法是添加一些 null 检查,在中提取 post_title 以防止 1) 没有额外内容(Bundle 为 null)、2) 没有post_title条目,以及 3) 具有无法转换为字符串的 post_title 条目。

这看起来像:

String post_title = "";
Bundle b = getIntent().getExtras();
if( b != null ) {
    post_title = b.getString("post_title");
}

if( post_title == null || post_title.isEmpty() ) {
    // call firebase
}
else {
    txttitle.setText(post_title);
}

或者,您可以只使用 ,它将在内部为您执行相同的检查,如果缺少 extras 或缺少 post_title 条目或不是 String,则返回 null。getStringExtra

String post_title = getIntent().getStringExtra("post_title");

if( post_title == null || post_title.isEmpty() ) {
    // call firebase
}
else {
    txttitle.setText(post_title);
}