2017-11-18 2 views
-1

Ich habe versucht, eine Datenfolge aus meiner Aktivität mithilfe von Bundle an ein Fragment zu senden, aber wenn ich versuche, darauf zuzugreifen, führt dies zu einer Nullpunkterregung.Auslösen der Nullpointer-Ausnahme beim Senden von Daten von der Aktivität zum Fragment onCreate

Die oncreate Methode der Tätigkeit wie folgt aussieht

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chart); 

    // Setup toolbar and title 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    readDb(); 
    printChart(); 
    printTop10(); 

    Bundle bundle = new Bundle(); 
    bundle.putString("edttext", myString); 
    // set Fragmentclass Arguments 
    ToolbarFragment fragobj = new ToolbarFragment(); 
    fragobj.setArguments(bundle); 

} 

und das Fragment auf dem onCreateView sieht wie folgt aus

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

    String strtext = getArguments().getString("edttext"); 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_toolbar, container, false); 
} 

jede Hilfe der Nullpointer, um loszuwerden, würde geschätzt, ich Ich versuche, Daten an das Fragment zu senden, so dass es die Freigabe-Schaltfläche verwenden und die Daten freigeben kann.

+0

Sie arbeiten nicht mit 'fragobj'. Wie genau laden Sie 'ToolbarFragment' in die' Aktivität'? –

Antwort

0

Es scheint, dass das Erhalten von Teil des "edttext" -Schlüssels null verursacht, weil es i s wird ausgelöst, wenn ihm kein Wert zugewiesen wurde. Ich denke also, dass das Abrufen des Schlüssels "edtext" mit einem Standardwert die Null vermeiden könnte.

Sie wie in der oncreateview des Fragments

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

//in this line add these "" as a default value to avoid null. 

String strtext = getArguments().getString("edttext",""); 

// Inflate the layout for this fragment 
return inflater.inflate(R.layout.fragment_toolbar, container, false); 
    } 

EDIT

die vorherige Antwort Vergessen und dies tun:

diese löschen:

  Bundle bundle = new Bundle(); 
bundle.putString("edttext", myString); 
// set Fragmentclass Arguments 
ToolbarFragment fragobj = new ToolbarFragment(); 
fragobj.setArguments(bundle); 

und Nehmen wir an, Ihr Aktivitätsname ist (My Aktivität), tut dies dann unter onCreate

 private String myString="whatever"; 

     @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chart); 

     // Setup toolbar and title 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     readDb(); 
     printChart(); 
     printTop10(); 


     } 


    //add this method (this method will send the myString to fragment) 
    public String getmyString(){ 


    return myString; 
    } 

jetzt in deinem Fragment gehen und entfernen Sie diese aus oncreateview

String strtext = getArguments().getString("edttext"); 

und tat, wie dies in Fragmente

  private String strtext=""; 

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

//now get the string like that 

    strtext=((MyActivity)getActivity).getmyString(); 

// Inflate the layout for this fragment 
return inflater.inflate(R.layout.fragment_toolbar, container, false); 

}

Aktualisieren

1) Stellen Sie sicher, dass die Liste (Elemente) nicht null ist. Sie sollten es initialisieren, bevor Sie es auffüllen (um das Problem zu erkennen, ist es möglicherweise besser, zu zeigen, wie Sie Ihre Artikelliste auffüllen).

2) versuchen, dies in getmystring() -Methode:

  public String getmyString(){ 

     for(int i=0 ; i<items ; i++){ 

      myString=items.get(i); 
     } 

     return myString; 
     } 

einfach vergessen Sie nicht, Ihre Artikel Liste in onCreate zu initialisieren, bevor Sie mit etwas füllen.

+0

Es stürzte damit und sagte verursacht durch: java.lang.NullPointerException: Versuch, virtuelle Methode 'java.lang.String android.os.Bundle.getString (java.lang.String, java.lang.String)' auf eine Null-Objekt-Referenz, die das "" nach edttext – Kevin

+0

hinzufügt, übergebe (mystring) als leer oder hat es einen Wert? –

+0

Fügen Sie den Code für (MyString) ein, wie legen Sie einen Wert dafür fest. –

Verwandte Themen