简体   繁体   中英

Android Studio: Attempt to invoke virtual method 'void android.widget.ImageButton.setImageResource(int)' on a null object reference

I try to run my program but i get this error. I have try everything but i still get this error. I don't know why is this happening because i checking on HomeActivity.java if the post is liked or not to advoid the NullPointerException

Error:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setImageResource(int)' on a null object reference
        at com.sm.socialmeme.HomeActivity$1.onDataChange(HomeActivity.java:94)
        at com.google.firebase.database.Query$1.onDataChange(Query.java:189)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7562)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

My firebase real-time database

HomeActivity.java:

package com.sm.socialmeme;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class HomeActivity extends AppCompatActivity {

    // Global variables \\
    DatabaseReference mRef;
    List<PostModel> postList;
    RecyclerView.Adapter recyclerAdapter;
    RecyclerView recyclerView;
    ProgressBar progressBar;
    static String post_id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        final DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference("users");
        final FirebaseAuth mAuth = FirebaseAuth.getInstance();
        final FirebaseUser user = mAuth.getCurrentUser();
        final ImageButton new_post = findViewById(R.id.new_post_btn);
        final ImageButton settings = findViewById(R.id.settingsButton);
        ImageButton like_btn = findViewById(R.id.likeBtn);
        recyclerView = findViewById(R.id.recyclerView);
        mRef = FirebaseDatabase.getInstance().getReference().child("posts");
        progressBar = findViewById(R.id.progressBar4);
        progressBar.setVisibility(View.VISIBLE);
        postList = new ArrayList<>();
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        if (user == null) {
            finish();
            startActivity(new Intent(HomeActivity.this, MainActivity.class));
        }

            mRef.addListenerForSingleValueEvent(new ValueEventListener(){
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        PostModel post = new PostModel();
                        post_id = snapshot.child("id").getValue().toString();
                        post.setImgUrl(snapshot.child("imgUrl").getValue().toString());
                        post.setName(snapshot.child("name").getValue().toString());
                        post.setLikes(snapshot.child("likes").getValue().toString());

                        // check if post is liked from current user or not \\
                        if (snapshot.child("likesList").exists()){
                            if (snapshot.child("likesList").child(user.getDisplayName()).exists()) {
                                // post is liked \\
                                like_btn.setImageResource(R.drawable.like_emoji);
                            }
                        }else{
                            // post is not liked \\
                            like_btn.setImageResource(R.drawable.like_emoji_before);
                        }

                        postList.add(post);

                        // notify adapter when a new item was added \\
                        if (recyclerAdapter != null){
                            recyclerAdapter.notifyDataSetChanged();
                        }
                    }
                    progressBar.setVisibility(View.GONE);
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError){
                    Toast.makeText(HomeActivity.this, "Error: " + databaseError, Toast.LENGTH_SHORT).show();
                    progressBar.setVisibility(View.GONE);
                }
            });

            recyclerAdapter = new RecyclerAdapter(HomeActivity.this,postList);
            recyclerView.setAdapter(recyclerAdapter);
            recyclerAdapter.notifyDataSetChanged();


        settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(HomeActivity.this, SettingsActivity.class));
            }
        });

        new_post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(HomeActivity.this, UploadPhotoActivity.class));
            }
        });
    }

    public void clearList(){
        if (postList != null){
            postList.clear();
            if (recyclerAdapter != null){
                recyclerAdapter.notifyDataSetChanged();
            }
        }
        postList = new ArrayList<>();
    }
}

NOTE: I make the like_btn global but is not working again.

is your post_item.xml file is attached to Recycler view? if yes than you have to use click listener.

Just Access your button from the recyclerAdapter.java

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

Related Question NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference I got Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference Attempt to invoke virtual method 'void android.widget.TextView.setVisibility(int)' on a null object reference Attempt to invoke virtual method 'void android.widget.TextView.setBackgroundColor(int)' on a null object reference java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CardView.setVisibility(int)' on a null object reference Attempt to invoke virtual method 'void android.view.View.measure(int, int)' on a null object reference Attempt to invoke virtual method 'void android.widget.ListView.clearTextFilter()' on a null object reference null Object :Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference Android: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference Proguard issues: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM