开发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
相关产品推荐
相关产品推荐

