猿问

activity向fragment传递bundle对象时getString方法有空指针异常

这是一个我觉得很奇怪的事情,我想把一个由activity传过来的HashMap的内容放到listView中

private ListView mListView=null;//listView
private SimpleAdapter sim_adapter;//简单适配器
private List<Map<String,Object>>dateList;//数据源
HashMap<String,String> freList=null;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_fre_list,null);
    mListView=(ListView) view.findViewById(R.id.listView);
    Bundle bundle=getArguments();//可以很确定这个bundle一定是接收到了的,可奇怪就奇怪在这个地方
    SerMap serializableMap = (SerMap) bundle.get("freList");
    //定义SerMap方法(这是我自己写的一个方法可以吧HashMap serializable化)
    freList=serializableMap.getMap();
    dateList=new ArrayList<Map<String, Object>>();
    dateList=getData();
    sim_adapter=new SimpleAdapter(getActivity(),dateList,R.layout.item,new String[]{"friend","newCount"},new int[]{R.id.friend,R.id.newCount});
    mListView.setAdapter(sim_adapter);
    return view;
}

这是定义数据源的getData方法

private List<Map<String,Object>> getData(){
    int k=freList.size();//得到map的长度
    Object[] keys =  freList.keySet().toArray();
    Object[] values =  freList.values().toArray();//键和值都分别转换为数组
  /*  for (i=0;i<k;i++){
        System.out.println("--------"+i+"---------");
        System.out.println("--------"+keys[i]+"---------");
        System.out.println("--------"+values[i]+"---------");
    }*/ // 这是一个注释掉的代码 这里也有一个奇怪的地方--->如果把接下来的for循环注释掉这个循环可以正常输出
    而如果把这段注释掉运行接下来的循环就会报数组越界的异常。
    for(int i=0;i<k;i++){
        Map<String,Object>map=new HashMap<String, Object>();
        map.put("friend",keys[i]);
        map.put("newCount",values[i]);
        dateList.add(map);
    }
    return dateList;
}

然后最主要的奇怪的地方是这里(这段代码如果这么写的话):

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_fre_list,null);
    mListView=(ListView) view.findViewById(R.id.listView);
    Bundle bundle=getArguments();//可以很确定这个bundle一定是接收到了的,可奇怪就奇怪在这个地方
    if(bundle!=null){//把上边的那段代码放在这个if语句中
    SerMap serializableMap = (SerMap) bundle.get("freList");
    freList=serializableMap.getMap();
    dateList=new ArrayList<Map<String, Object>>();
    dateList=getData();
    sim_adapter=new SimpleAdapter(getActivity(),dateList,R.layout.item,new String[]{"friend","newCount"},new int[]{R.id.friend,R.id.newCount});
    mListView.setAdapter(sim_adapter);
    }
    return view;
}

如果这么写,程序会正常运行也不会报getString方法空指针的错误,可是listView就不会在UI界面显示。可如果像第一种那样写,就会报getString空指针异常.

各路大神能否拯救一下我这个萌新?在做一个手机QQ的项目.快到期了,可是被这个问题困扰好几天了.大家能否帮帮我~~感激不尽 

蜡笔小新的Qe
浏览 1501回答 0
0回答
随时随地看视频慕课网APP

相关分类

Android
我要回答