-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建議排序問題 –

相關問題