2016-06-09 77 views
0

我实际上有两个活动。第一个是打电话给对方得到结果。调用片段方法引发NullPointerException异常

的startActivityForResult部分是好的。请求代码和结果代码都可以。

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

这里是我的源代码:

的onCreate之前(类范围)

ComponentsFragment componentsFragment; 

在的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(); 
    } 

} 

对于 '厨房' 的示例部件,实际输出是:


*****活动开始为结果

*****组分:厨房

*****上的活动结果

***** COMPONENT_NAME:厨房

***** REPORT_ID:1

***** CATEGORY_ID:1

抛出异常


所以componentsFragment不为空...

对不起,我有一些问题,我logcat的,所以我实际上敬酒工作:(

回答

0

正是有了替代片段交易的问题。

我没有使用组件片段在本次交易中如上所述,但是是新创建的。

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();