-1

データをアクティビティからフラグメントに渡す方法。それは十分に文書化されていますが、残念ながら私のための解決策はありません。AsyncTaskからFragmentにデータを送信する方法

メインアクティビティ内の内部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を呼び出すt nullオブジェクト参照で' android.os.Bundle.getString(java.lang.String) '

私は助けていただきたいと思います。

+0

あなたのAsyncTaskコードとは何ですか? –

+0

'FragmentTransaction'に' MyFragmentClass'の別のインスタンスを追加していないことを確認してください。また、あなたが共有したコードは、エラーを出すでしょう。 'bundle.putString(" test "、" AsyncTaskから); ' – SlashG

+0

あなたの提案をありがとうCgxの解決策は –

答えて

0

を解決するのに役立ちます

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

でこれを試してみてください)は非同期である.soがあなたを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

あなたの助けをありがとうございます。あなたのソリューションはうまくいきました。asyncTaskにmanager = LocalBroadcastManager.getInstance(getApplicationContext());を追加するだけでした。 –

0

あなたonCreateViewこれはまた、フラグメントを作成し、AsyncTaskから取得するので、あなたがバンドルを取得することはできません、もちろん、nullポインタエラー

+0

でした。これは 'NullPointerException'を処理するだけです。 – SlashG

+0

Cgxの提案が問題をソートしました –

関連する問題