Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 从firebase中删除项目而不使应用程序崩溃_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 从firebase中删除项目而不使应用程序崩溃

Android 从firebase中删除项目而不使应用程序崩溃,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我是android新手,我一直在玩firebase的示例应用程序。我想添加一个delete按钮,通过将DatabaseReference mPostReference设置为null,从数据库中删除当前正在查看的帖子。但是,这会导致添加到MPosReference的ValueEventListener出现空指针异常,从而导致应用程序崩溃 // Get post key from intent mPostKey = getIntent().getStringExtra(EXTRA_P

我是android新手,我一直在玩firebase的示例应用程序。我想添加一个delete按钮,通过将DatabaseReference mPostReference设置为null,从数据库中删除当前正在查看的帖子。但是,这会导致添加到MPosReference的ValueEventListener出现空指针异常,从而导致应用程序崩溃

    // Get post key from intent
    mPostKey = getIntent().getStringExtra(EXTRA_POST_KEY);
    if (mPostKey == null) {
        throw new IllegalArgumentException("Must pass EXTRA_POST_KEY");
    }

    // Initialize Database
    mPostReference = FirebaseDatabase.getInstance().getReference()
            .child("posts").child(mPostKey);

    ValueEventListener postListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get Post object and use the values to update the UI
            Post post = dataSnapshot.getValue(Post.class);
            // Text Views in activity
            mAuthorView.setText(post.author);
            mTitleView.setText(post.title);
            mBodyView.setText(post.body);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
            // [START_EXCLUDE]
            Toast.makeText(PostDetailActivity.this, "Failed to load post.",
                    Toast.LENGTH_SHORT).show();
            // [END_EXCLUDE]
        }
    };
    mPostReference.addValueEventListener(postListener);

   //delete button clicked
   deleteButton.setOnClickListener(new View.OnClickListener() {
        mPostReference.setValue(null);
   }
如果mpostreeference已被删除或设置为null,是否有办法防止应用程序崩溃?是否有更好的方法实现删除按钮? 如有任何想法/建议,将不胜感激。多谢各位

这是日志

FATAL EXCEPTION: main
   Process: com.google.firebase.quickstart.database, PID: 2861
   java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.google.firebase.quickstart.database.models.Post.author' on a null object reference
   at com.google.firebase.quickstart.database.PostDetailActivity$1.onDataChange(PostDetailActivity.java:93)
   at com.google.android.gms.internal.zzbmz.zza(Unknown Source)
   at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
   at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:6145)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

您只需要添加一个
if
语句来检查
dataSnapshot
是否有值或
null

public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        // Get Post object and use the values to update the UI
        Post post = dataSnapshot.getValue(Post.class);
        // Text Views in activity
        mAuthorView.setText(post.author);
        mTitleView.setText(post.title);
        mBodyView.setText(post.body);
    }
}

请提供logcatoutput@AdityaK添加了logcat输出:)