-1

如何将数据从活动传递到片段。它是有据可查的,但不幸的是没有解决方案适用于我。如何将数据从AsyncTask发送到片段

我想从我的主要活动内部的AsyncTask类发送数据到另一个片段。

最流行的答案是使用捆绑,所以我曾尝试以下:

的AsyncTask:

Bundle bundle = new Bundle(); 
bundle.putString("test", "From AsyncTask"); 

MyFragmentClass fragobj = new MyFragmentClass(); 
fragobj.setArguments(bundle); 

片段:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

rootView = inflater.inflate(R.layout.fragment_one, container, false); 

String value = getArguments().getString("test"); 
Log.i("valueTest", value); 

return rootView; 

} 

的字符串没有被传递到片段因为我收到以下内容:

“java.lang.NullPointerException:Attemp吨调用虚拟方法'java.lang.String android.os.Bundle.getString(java.lang.String)'空对象引用“

我希望有任何帮助。

+0

什么是您的AsyncTask代码? –

+0

确保你没有在'FragmentTransaction'中添加一个不同的'MyFragmentClass'实例。此外,您本身共享的代码会导致错误。 您还没有关闭双引号:'bundle.putString(“test”,“From AsyncTask);' – SlashG

+0

感谢您的建议Cgx解决方案 –

回答

0

当然你不能捆绑,因为创建片段和来自的AsyncTask得到尝试,这是异步)。所以你在asyncTask完成时可以使用BroadCastReceiver来接收数据; 片段:

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.layout_demo, container, false); 
    //to register br 
    initBroadCastReceiver(); 
    return view; 
} 

private void initBroadCastReceiver() { 
    manager = LocalBroadcastManager.getInstance(getContext()); 
    MyBroadCastReceiver receiver = new MyBroadCastReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    //whatever 
    filter.addAction("com.action.test"); 
    manager.registerReceiver(receiver,filter); 
} 

class MyBroadCastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //e.g 
     String key = intent.getStringExtra("key"); 
    } 
} 

asyncTask-> onPostExcute()

Intent intent = new Intent("com.action.test"); 
    intent.putExtra("key","123"); 
    manager.sendBroadcast(intent); 
+0

感谢您的帮助,您的解决方案工作,我只需要添加管理= LocalBroadcastManager.getInstance(getApplicationContext());到asyncTask。 –

0

在onCreateView

Bundle b = getActivity().getIntent().getExtras(); 
    if(b != null) { 
     String test = b.getString("test"); 
    } 

这也有助于解决空指针错误

+0

这只会处理'NullPointerException',它不会修复该数据未被传递 – SlashG

+0

谢谢,Cgx建议排序问题 –

相关问题