有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android Studio:尝试调用虚拟方法“void Android”。小装置。图像按钮。空对象引用上的setImageResource(int)“”

我试图运行我的程序,但我得到了这个错误。我什么都试过了,但还是犯了这个错误。我不知道为什么会发生这种情况,因为我正在检查HomeActivity.java是否喜欢这篇文章,以避免NullPointerException

错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.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 安卓.os.Handler.handleCallback(Handler.java:883)
        at 安卓.os.Handler.dispatchMessage(Handler.java:100)
        at 安卓.os.Looper.loop(Looper.java:223)
        at 安卓.app.ActivityThread.main(ActivityThread.java:7562)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:950)

My firebase real-time database

家庭活动。java:

package com.sm.socialmeme;

import 安卓x.annotation.NonNull;
import 安卓x.annotation.Nullable;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.constraintlayout.widget.ConstraintLayout;
import 安卓x.recyclerview.widget.LinearLayoutManager;
import 安卓x.recyclerview.widget.RecyclerView;

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

import com.google.安卓.gms.tasks.OnFailureListener;
import com.google.安卓.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<>();
    }
}

注意:我将like_btn设为全局,但不再工作


共 (2) 个答案

  1. # 1 楼答案

    这是你的贴子。xml文件是否附加到回收器视图?如果是,则必须使用“单击侦听器”

  2. # 2 楼答案

    只需从recyclerAdapter.java访问您的按钮