错误 - 尝试在空对象引用上调用虚拟方法“int android.graphics.Bitmap.getHeight()”

Posted

技术标签:

【中文标题】错误 - 尝试在空对象引用上调用虚拟方法“int android.graphics.Bitmap.getHeight()”【英文标题】:Error - Attempt to invoke virtual method 'int android.graphics.Bitmap.getHeight()' on a null object reference 【发布时间】:2021-08-24 05:30:22 【问题描述】:

当图像加载到回收器视图https://***.com/a/67860281/15537898 时,我正在尝试将高度和宽度从固定更改为匹配父级或包装内容,这是我正在尝试实现的答案,但在它给了我这个错误之后

尝试调用虚方法'int android.graphics.Bitmap.getHeight()' 在空对象引用上

Fragment_Search.java

ShapeableImageView siv;
    Bitmap bm;
    int height = bm.getHeight();
    int width = bm.getWidth();

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.fragment_search, container, false);
        requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        postRecyclerView = view.findViewById(R.id.postRecyclerView);
        siv = view.findViewById(R.id.imageView);
        ViewGroup.LayoutParams params = siv.getLayoutParams();
        params.height = height;
        params.width = width;
        postRecyclerView.setLayoutManager(
                new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
        );
        params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        getData();
        mUploads = new ArrayList<>();
        postsAdapter = new PostAdapter_Search(getContext(), mUploads);
        postRecyclerView.setAdapter(postsAdapter);
        return view;
    

【问题讨论】:

这个错误发生在哪一行?您是否已将 bm 变量初始化为某个位图,或者您是否只是声明了它?你需要提供更多的细节哥们! 好的兄弟我已经给出了整个错误,请检查问题 当我点击错误时,它会将我带到第 44 行,这是我实现这行代码的屏幕方向行 requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);你可以在问题中看到 这不是你应该做的。你的 bm 甚至没有初始化。首先,如何将图像设置为您的ShapeImageView?以这种方式获取图像的宽度/高度。并且在重新加载图像之前不要将布局参数设置回扭曲内容/匹配父级。它甚至可能不再需要了。 【参考方案1】:

位图变量 (bm) 未初始化,即使您在 onCreateView 中对其进行了初始化,您的应用程序仍然会崩溃,因为您试图在 bm 变量甚至初始化之前获取位图宽度和高度。你可以这样做

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
    View view = inflater.inflate(R.layout.fragment_search, container, false);
    
    bm = initialize_bitmap_here
    width = bm.getWidth()
    height = bm.getHeght()


    return view;

【讨论】:

以上是关于错误 - 尝试在空对象引用上调用虚拟方法“int android.graphics.Bitmap.getHeight()”的主要内容,如果未能解决你的问题,请参考以下文章

尝试在空对象引用上调用虚拟方法 'void android.view.View.measure(int, int)'

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ActionBar.setNavigationMode(int)”

NullPointerException:尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()”

NullPointerException 错误尝试在空对象引用上调用虚拟方法错误

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int android.view.View.getImportantForAccessibility()”

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int android.view.View.getBottom()”