Java Fragment BaseAdapter返回NullPointerException

Java Fragment BaseAdapter返回NullPointerException,java,android,android-fragments,Java,Android,Android Fragments,我的应用程序包含两个片段,需要从main活动获取信息。在main活动中将数据加载并放入数组列表,然后数据应显示在第一个片段中。因此,我创建了一个方法,将数组列表传递给第一个片段 我遇到的问题是,在我的Fragment类中的mContactsAdapter=newsimpledapter(…)行上,我得到了一个NullPointerException。但是我不明白为什么会这样,因为我在onCreateView方法中设置了Adapter。是不是设置了错误的方式 我的主要活动: public clas

我的应用程序包含两个
片段
,需要从
main活动
获取信息。在
main活动中
将数据加载并放入
数组列表
,然后数据应显示在第一个
片段中。因此,我创建了一个方法,将
数组列表
传递给第一个
片段

我遇到的问题是,在我的
Fragment
类中的
mContactsAdapter=newsimpledapter(…)
行上,我得到了一个
NullPointerException
。但是我不明白为什么会这样,因为我在
onCreateView
方法中设置了
Adapter
。是不是设置了错误的方式

我的主要活动:

public class MainActivity extends AppCompatActivity {

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactList = new ArrayList<>();

    }

    public void FillAndPresent() {

        /***
         * fill ArrayLists
         * ...
         */

        CallsFragment fragment = new CallsFragment();
        ((CallsFragment) fragment).show(contactList);

    }

}
public类MainActivity扩展了AppCompatActivity{
ArrayList联系人列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactList=新的ArrayList();
}
公共空白填写和当前(){
/***
*填充数组列表
* ...
*/
CallsFragment片段=新的CallsFragment();
((CallsFragment)片段).show(contactList);
}
}
我的片段类:

public class CallsFragment extends Fragment{

    private BaseAdapter mContactsAdapter;
    private final List<HashMap<String, String>> mContactsListItems = new ArrayList<>();

    public CallsFragment() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_calls, container, false);


        ((ListView) view.findViewById(R.id.list))
                .setAdapter(mContactsAdapter);

        return view;
    }


    public void show(ArrayList c){

        mContactsAdapter = new SimpleAdapter(
                getActivity(), mContactsListItems,
                R.layout.list_item, new String[]{"price", "brand",
                "dist"}, new int[]{R.id.price,
                R.id.brand, R.id.dist});

        mContactsListItems.addAll(c);
        mContactsAdapter.notifyDataSetChanged();

        ((ListView) getActivity().findViewById(R.id.list))
                .setAdapter(mContactsAdapter);
    }

}
公共类调用片段扩展片段{
专用基站适配器mContactsAdapter;
私有最终列表mContactsListItems=new ArrayList();
公共调用片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u调用,容器,false);
((ListView)view.findViewById(R.id.list))
.setAdapter(mContactsAdapter);
返回视图;
}
公共无效显示(ArrayList c){
mContactsAdapter=新的simpledapter(
getActivity(),mContactsListItems,
R.layout.list_项,新字符串[]{“价格”,“品牌”,
“dist”},新int[]{R.id.price,
R.id.brand,R.id.dist});
mContactsListItems.addAll(c);
mContactsAdapter.notifyDataSetChanged();
((ListView)getActivity().findViewById(R.id.list))
.setAdapter(mContactsAdapter);
}
}

正如@0x0nosugar所说的


发生这种情况是因为片段尚未附加到“活动”

试试这个

CallsFragment fragment = new CallsFragment();
fragment.show(contactList);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.mainActivity,fragment);
// >> here you replace the main activity layout with your fragment by put the id of it.

fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

阅读有关片段的更多信息

异常消息说了什么(NullPointerException除外)?
java.lang.NullPointerException:尝试在android.widget.SimpleAdapter上的空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSystemService(java.lang.String)”。(SimpleAdapter.java:93)
然后是对上述行的引用发生这种情况是因为
片段
尚未附加到
活动
,因此
getActivity()
返回null。请参阅文档,了解我想应该在MainActivity中使用的调用片段的信息,不是吗?我这样尝试过,但仍然收到相同的错误您是否收到相同的错误或其他错误?是的,片段必须附加到活动,无论如何,请使用建议的是的,我得到了同样的错误,但我读到如果使用了ViewPager,处理起来会有点不同,我现在正在使用我的代码,所以我可以使用你的代码建议替换片段,但我仍然得到了完全相同的错误返回