简体   繁体   English

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

[英]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我不知道为什么会这样,因为我检查HomeActivity.java是否喜欢帖子以避免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我的firebase实时数据库

HomeActivity.java:主页Activity.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.注意:我将like_btn全局但不再工作。

is your post_item.xml file is attached to Recycler view?您的 post_item.xml 文件是否附加到回收站视图? if yes than you have to use click listener.如果是,则必须使用单击侦听器。

Just Access your button from the recyclerAdapter.java只需从recyclerAdapter.java访问您的按钮

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 NullPointerException:尝试在空对象引用上调用虚拟方法&#39;void android.widget.ImageView.setImageResource(int)&#39; - NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference 我尝试在空对象引用上调用虚拟方法&#39;void android.widget.ImageView.setImageResource(int)&#39; - I got Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference 尝试在 null object 引用上调用虚方法“void android.widget.TextView.setVisibility(int)” - Attempt to invoke virtual method 'void android.widget.TextView.setVisibility(int)' on a null object reference 尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setBackgroundColor(int)” - Attempt to invoke virtual method 'void android.widget.TextView.setBackgroundColor(int)' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.widget.CardView.setVisibility(int)” - java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CardView.setVisibility(int)' on a null object reference 尝试在 null object 参考上调用虚拟方法 'void android.view.View.measure(int, int)' - Attempt to invoke virtual method 'void android.view.View.measure(int, int)' on a null object reference 尝试在空对象引用上调用虚拟方法&#39;void android.widget.ListView.clearTextFilter()&#39; - 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 - null Object :Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference Android:尝试在空对象引用上调用虚拟方法&#39;void android.widget.ListView.setAdapter(android.widget.ListAdapter)&#39; - Android: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference Proguard问题:尝试在空对象引用上调用虚方法&#39;void android.widget.ListView.setAdapter(android.widget.ListAdapter)&#39; - 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