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

开发Android应用存储用户搜索项至数组时遇空指针异常求助

解决SimpleAdapter空指针异常问题

嘿,这个空指针问题我可太熟了!咱们先拆解一下错误信息:你看到的java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference,说白了就是你给SimpleAdapter传的数据源List是个null,当ListView设置适配器的时候,SimpleAdapter会去调用这个List的size()方法,结果碰到了null,直接炸了。

咱们一步步来解决:

  • 第一步:先把存储搜索项的数据源List初始化好
    你肯定是只声明了List变量,但没给它创建实例!比如在Activity的onCreate()方法里,提前把List实例化:

    // 如果是存字符串搜索项的列表
    List<String> searchHistory = new ArrayList<>();
    // 如果是SimpleAdapter需要的Map结构列表(因为SimpleAdapter通常用这种格式)
    List<Map<String, Object>> adapterData = new ArrayList<>();
    

    别只写List<String> searchHistory;就完事,这样它默认是null,后续操作肯定出问题。

  • 第二步:初始化SimpleAdapter时传入正确的数据源
    创建适配器的时候,一定要把刚才初始化好的List传进去,不能传null:

    SimpleAdapter searchAdapter = new SimpleAdapter(
        this,
        adapterData, // 这里必须是已经new过的List,不能是null
        R.layout.your_search_item_layout, // 你的列表项布局
        new String[]{"search_content"}, // 布局里对应的key
        new int[]{R.id.tv_search_content} // 布局里对应的TextView ID
    );
    // 再给ListView设置适配器
    yourListView.setAdapter(searchAdapter);
    
  • 第三步:添加搜索项时记得更新适配器
    当用户完成一次搜索,要把搜索项加到列表里,然后通知适配器刷新UI:

    // 比如添加新的搜索文本到Map列表
    Map<String, Object> newItem = new HashMap<>();
    newItem.put("search_content", userSearchText);
    adapterData.add(newItem);
    // 通知适配器数据变了,更新ListView
    searchAdapter.notifyDataSetChanged();
    
  • 可选优化:处理空搜索记录的情况
    如果用户还没有任何搜索记录,ListView会空着,你可以加个空视图提示用户:

    TextView emptyTip = findViewById(R.id.tv_empty_tip);
    yourListView.setEmptyView(emptyTip);
    emptyTip.setText("还没有搜索记录哦~");
    

核心问题就是数据源List没提前初始化,只要把这一步做好,这个空指针异常就消失啦!

内容的提问来源于stack exchange,提问作者Mohammedis271

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:51:55