Android 调用片段方法会引发NullPointerException

Android 调用片段方法会引发NullPointerException,android,android-fragments,android-context,Android,Android Fragments,Android Context,我实际上有两项活动。第一种方法是调用另一种方法以获得结果 startActivityForResult部分很好。请求代码和结果代码正常 但是它在Context.getResources()上抛出NullPointerException,我不明白为什么。我知道这个例外意味着什么,但在这个特殊的情况下,我不明白 以下是我的源代码: onCreate之前(类范围内) 立即创建 componentsFragment = new ComponentsFragment(); 点击按钮事件 Intent i

我实际上有两项活动。第一种方法是调用另一种方法以获得结果

startActivityForResult部分很好。请求代码和结果代码正常

但是它在Context.getResources()上抛出NullPointerException,我不明白为什么。我知道这个例外意味着什么,但在这个特殊的情况下,我不明白

以下是我的源代码:

onCreate之前(类范围内)

立即创建

componentsFragment = new ComponentsFragment();
点击按钮事件

Intent i = new Intent(ReportActivity.this, ManageComponentsActivity.class);
i.putExtra("action", PICK_COMPONENT_REQUEST);
startActivityForResult(i, PICK_COMPONENT_REQUEST);
在第二个活动中

Toast.makeText(c, "*****activity started for result", Toast.LENGTH_LONG).show();

Component component = (Component) parent.getItemAtPosition(position);

Toast.makeText(c, "****component : " + component.getName(), Toast.LENGTH_LONG).show();

Intent i = new Intent();
i.putExtra("component_name", component.getName());
setResult(RESULT_OK, i);

finish();
在第一个活动中-onActivityResult

if (requestCode == PICK_COMPONENT_REQUEST && resultCode == RESULT_OK) {

    Toast.makeText(this, "*****on activity result", Toast.LENGTH_LONG).show();
    Toast.makeText(this, "*****component_name : " + data.getStringExtra("component_name"), Toast.LENGTH_LONG).show();
    Toast.makeText(this, "*****report_id : " + report_id, Toast.LENGTH_LONG).show();
    Toast.makeText(this, "*****category_id : " + category_id, Toast.LENGTH_LONG).show();

    try {

        if (componentsFragment == null) {
            Toast.makeText(this, "*****componentsFragment IS NULL", Toast.LENGTH_LONG).show();
        }

        //componentsFragment.AddComponentItem(data.getStringExtra("component_name"), report_id, category_id);
        componentsFragment.AddComponentItem("Fenêtre", "1", "1");


        componentsFragment.RefreshList("1", "1");

    }

    catch (Exception e) {
        Toast.makeText(this, String.valueOf(e), Toast.LENGTH_LONG).show();
    }

}
对于“厨房”的示例组件,实际输出为:


*****已为结果启动活动

*****组成部分:厨房

*****论活动结果

*****组件名称:厨房

*****报告编号:1

*****类别识别号:1

抛出异常


所以componentsFragment不是空的


抱歉,我的logcat有一些问题,所以我实际上使用Toasts:(

这是替换片段事务的问题

我没有在本事务中使用上面描述的组件片段,而是新创建的一个

    ComponentsFragment fragment = new CommponentsFragment();

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack so the user can navigate back
    transaction.replace(R.id.fragment_container, fragment);
    transaction.addToBackStack(null); // Commit the transaction
    transaction.commit();
这一行:

transaction.replace(R.id.fragment_container, fragment);
必须替换为:

transaction.replace(R.id.fragment_container, componentsFragment);
这个应该被删除:

ComponentsFragment fragment = new CommponentsFragment();
ComponentsFragment fragment = new CommponentsFragment();