-1

So übergeben Sie Daten von einer Aktivität an ein Fragment. Es ist gut dokumentiert, aber leider funktioniert keine Lösung für mich.So senden Sie Daten von AsyncTask an Fragment

Ich möchte Daten aus einer inneren AsyncTask-Klasse innerhalb meiner Hauptaktivität an ein anderes Fragment senden.

Die populärste Antwort ist Bundle zu verwenden, so habe ich versucht, die folgenden:

AsyncTask:

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

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

Fragment:

@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; 

} 

Die Zeichenfolge wird an das Fragment nicht weitergegeben werden wie ich folgendes erhalte:

"java.lang.NullPointerException: Attemp t, um die virtuelle Methode 'java.lang.String android.os.Bundle.getString (java.lang.String)' für eine Nullobjekt-Referenz aufzurufen "

Ich würde mich über jede Hilfe freuen.

+0

Was ist Ihr AsyncTask Code ist? –

+0

Stellen Sie sicher, dass Sie keine andere Instanz von 'MyFragmentClass' in der' FragmentTransaction' hinzufügen. Außerdem würde der Code, den Sie für sich freigegeben haben, einen Fehler enthalten. Sie haben die Anführungszeichen hier nicht geschlossen: 'bundle.putString (" test "," Von AsyncTask); ' – SlashG

+0

Vielen Dank für Ihre Vorschläge Cgx Lösung arbeitete –

Antwort

0

natürlich lösen Sie nicht Bündel bekommen können, weil Fragment erstellen und von AsyncTask erhalten ist asynchron) .so Sie könnte BroadCastReceiver verwenden, um Daten zu empfangen, wenn asyncTask ausgeführt wird; Fragment:

@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

Vielen Dank für Ihre Hilfe. Ihre Lösung funktionierte. Ich musste nur Manager = LocalBroadcastManager.getInstance (getApplicationContext()); zur asyncTask. –

0

Versuchen Sie dies in Ihrem onCreateView

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

dies hilft auch Null-Pointer-Fehler

+0

Dies würde nur die" NullPointerException ". Es würde nicht beheben, dass Daten nicht übergeben werden. – SlashG

+0

Vielen Dank, Cgx Vorschlag sortiert das Problem. –