You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android List Adapter空指针异常求助:调用String.equals时出现空对象引用

解决你的Android ListAdapter空指针异常问题

嘿,我发现你遇到的java.lang.NullPointerException和Binary XML错误,根源其实在你的布局文件里一个很容易忽略的拼写错误!

问题定位

你在list_item.xml里写了一个小写的<view>标签:

<view
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="@android:color/background_light"
    android:layout_below="@+id/movieImage">
</view>

Android布局系统里,原生的视图组件标签是大写开头的<View>,小写的<view>会被系统识别为自定义视图类,而你并没有定义这个类,所以inflater.inflate()会返回null。当后续代码尝试对null的row进行操作(甚至系统内部的视图绑定逻辑),就会触发空指针异常,也就是你看到的Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference。

修复步骤

  1. 修正布局文件的标签拼写
    把list_item.xml里的<view>和</view>改成<View>和</View>,顺便改成自闭合标签更规范:
<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="@android:color/background_light"
    android:layout_below="@+id/movieImage" />
  1. 优化你的Adapter代码(可选但推荐)
    你的MovieAdapter没有使用泛型,还维护了两份数据源(super的数据源和自己的list),容易出现类型转换和数据不一致问题。可以改成更简洁的泛型版本:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class MovieAdapter extends ArrayAdapter<MovieDataProvider> {

    public MovieAdapter(Context context, List<MovieDataProvider> data) {
        super(context, R.layout.list_item, data);
    }

    static class DataHandler{
        ImageView poster;
        TextView title;
        TextView rating;
    }

    @Override
    public View getView(int position, View row, ViewGroup parent){
        DataHandler handler;
        MovieDataProvider dataProvider = getItem(position);
        
        if (row == null) {
            handler = new DataHandler();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            row = inflater.inflate(R.layout.list_item, parent, false);
            handler.poster = row.findViewById(R.id.movieImage);
            handler.title = row.findViewById(R.id.movieTitle);
            handler.rating = row.findViewById(R.id.movieRating);
            row.setTag(handler);
        } else {
            handler = (DataHandler) row.getTag();
        }

        // 增加null判断,避免数据源为空时崩溃
        if(dataProvider != null){
            handler.poster.setImageResource(dataProvider.getMovie_poster());
            handler.title.setText(dataProvider.getMovie_title());
            handler.rating.setText(dataProvider.getMovie_rating());
        }
        return row;
    }
}

额外提示

  • 以后遇到布局相关的空指针异常,优先检查布局文件的标签拼写、ID是否正确,有没有引用不存在的资源。
  • 在getView里对数据源对象加null判断,能进一步提升代码的健壮性。

内容的提问来源于stack exchange,提问作者Mohammad Sufian Al-Omar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:17:10