2

Ich habe eine Hauptaktivität mit einem Pager und einem einfachen Datumsauswahl.Android: NullPointerException beim Aktualisieren von Fragment

Wenn ich ein Datum auswähle, rufe ich setCalendar in einem meiner Fragmente auf, um einen Wert zu ändern. In createChart erstelle ich ein einfaches Diagramm, die Ausnahme erscheint in der ersten Zeile, also schneide ich den Rest des Codes ab.

public static graph_month newInstance(int page, String title) { 
    graph_month fragment = new graph_month(); 
    Bundle args = new Bundle(); 
    args.putInt(PAGE, page); 
    args.putString(TITLE, title); 
    fragment.setArguments(args); 
    return fragment; 
} 
public graph_month() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     page = getArguments().getInt(PAGE); 
     title = getArguments().getString(TITLE); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_graph_month, container, false); 

    return view; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    this.createChart(); 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 


public void setCalendar(Calendar cal) { 
    this.cal = cal; 
    maxMonth = cal.getActualMaximum(cal.DAY_OF_MONTH); 
    this.createChart(); 
} 

public void createChart() { 
    lineChartW= (LineChart) getView().findViewById(R.id.lineChartW); 

Aber jetzt bekomme ich eine Nullpointer auf ein Null-Objekt-Referenz) und meiner Meinung nach ist jetzt null. Ich habe keine Ahnung warum und ich kann mir keine andere Möglichkeit vorstellen, meine Fragmente von meiner Aktivität zu aktualisieren.

Vollfehlercode:

Prozess: com.example.snyap.graphdemo, PID: 1491 java.lang.NullPointerException: Der Versuch, virtuelle Methode aufzurufen ‚java.lang.String android.view.View .toString() 'für einen Null-Objektverweis bei com.example.snyap.graphdemo.graphs.graph_month.createChart (graph_month.java:125) bei com.example.snyap.graphdemo.graphs.graph_month.setCalendar (graph_month. java: 120) bei com.example.snyap.graphdemo.Graph.setDate (Graph.java:138) bei com .beispiel.snyap.graphdemo.Graph.onDateSet (Graph.java:144) bei android.app.DatePickerDialog.onClick (DatePickerDialog.java:134) bei com.android.internal.app.AlertController $ ButtonHandler.handleMessage (AlertController .java: 165) bei android.os.Handler.dispatchMessage (Handler.java:111) bei android.os.Looper.loop (Looper.java:194) bei android.app.ActivityThread.main (ActivityThread.java : 5549) bei java.lang.reflect.Method.invoke (native Methode) bei java.lang.reflect.Method.invoke (Methode.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller. run (ZygoteInit.java: 964) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:759)

+0

Bitte buchen Sie die vollständige Stack-Trace. – cyroxis

+0

Setzen Sie this.createChart(); in onCreateView und anstelle von getView(). findViewById (R.id.lineChartW); do view.findViewById (R.id.lineChartW); – Austi01101110

+0

@ Austi01101110 gleichen Fehler – snyappy

Antwort

0

Dies ist eine richtige Art und Weise, dies zu tun:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_graph_month, container, false); 
    lineChartW= (LineChart) view.findViewById(R.id.lineChartW); 
    return view; 
} 

Es gibt keine Notwendigkeit onViewCreated für etwas außer Kraft zu setzen so was. Sie können auf diese Ansicht zugreifen, sobald Sie sie aufgeblasen haben. Sie können ein bisschen mehr darüber lesen here.

+0

Es funktioniert ohne Verwendung der setCalendar-Methode, aber wenn ich es verwende, verweist die nullPointerException jetzt auf mein lineChart-Objekt – snyappy

+0

, entferne die Zeile 'this.createChart();' weil du sie nicht mehr brauchst. – Vucko

+0

Wenn ich es aus der setCalendar-Methode entferne, wie sonst könnte ich mein Fragment aktualisieren? – snyappy