-1

Ich habe den folgenden Code:Gemeinsame Vorlieben Null-Zeiger Ausnahme auf Aktivität schließen

public void refresh(){ 
     View rootView=getView(); 
     final SharedPreferences pref = this.getContext().getSharedPreferences("MyFav", 0); 
     final SharedPreferences.Editor editor = pref.edit(); 
     Map<String,?> entries = pref.getAll(); 
     final Set<String> keys = entries.keySet();} 

Diese Funktion innerhalb eines Fragments ist und ich es von Aktivität anzurufenden wie folgt: -

public void onBackPressed() { 
     super.onBackPressed(); 
     FavLegislator fav =new FavLegislator(); 
     if(frag.equals("true")) 
      fav.refresh(); 
     finish(); 
    } 

Der gemeinsame Einstellungen können sich in der Aktivität geändert haben.
Ich möchte nur eine aktualisierte Liste der Einstellungen, wenn die Aktivität geschlossen wird.

Ich erhalte den folgenden Fehler auf die Aktivität Druck Zurück-Taste:

11-27 10:06:24.126 31645-31645/com.app.congress.congressapp E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.app.congress.congressapp, PID: 31645 
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference 
    at com.app.congress.congressapp.FavLegislator.refresh(FavLegislator.java:85) 
    at com.app.congress.congressapp.legislator_info.onBackPressed(legislator_info.java:466) 
    at com.app.congress.congressapp.legislator_info.onOptionsItemSelected(legislator_info.java:454) 
    at android.app.Activity.onMenuItemSelected(Activity.java:2912) 
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361) 
    at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147) 
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 
    at android.support.v7.widget.ToolbarWidgetWrapper$1.onClick(ToolbarWidgetWrapper.java:194) 
    at android.view.View.performClick(View.java:5201) 
    at android.view.View$PerformClick.run(View.java:21163) 
    at android.os.Handler.handleCallback(Handler.java:746) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5443) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

Kann jemand mir bitte mitteilen, warum ich die oben Störung erhalte und wie man es beheben?

Antwort

1

super.onBackPressed(); Ruf zerstören/Ihre Aktivität beenden und Sie können nicht mehr verwenden, jedes Objekt zu dieser Aktivität gehören so einfach diesen Anruf bewegen am Ende, und es gibt keine Notwendigkeit, diese finish()

public void onBackPressed() { 
     FavLegislator fav =new FavLegislator(); 
     if(frag.equals("true")) 
      fav.refresh(); 
     super.onBackPressed(); 
    } 

Änderung zu nennen

final SharedPreferences pref = this.getContext().getSharedPreferences("MyFav", 0); 

dieser

final SharedPreferences pref = getActivity().getSharedPreferences("MyFav", 0); 

Hinweis: bessere Option ist eine Utility-Klasse mit einer statischen Methode zu schaffen, die Ihre Präferenz Daten speichern wird so passieren nur den Kontext und die Daten zu Utility-Klasse und speichern Sie es auf Präferenz

public class Util { 

    public static void saveData(Context context,int i){ 
     // your preference code , change parameters accordingly 
    } 
} 

aus Ihrer Tätigkeit es wie

nennen
Util.saveData(this,5); 
+0

immer noch die gleichen Fehler – Anirban

+0

@Anirban Update versuchen, sollten Sie 'getActivity()' Funktion zum Abrufen der Kontext der Attach-Aktivität –

1

Sie können new FavLegislator() nicht anrufen und erwarten, dass es einen Kontext hat.

Dies scheint eine Aktivität oder eine Fragmentklasse zu sein. Wenn Sie einen new einen erstellen, wird der Kontext nicht angefügt, sodass getContext() null zurückgibt.

Wenn Sie versuchen, eine andere Ansicht zu aktualisieren, wenn Sie zu ihm zurückkehren, verwenden Sie die onResume Methode

Verwandte Themen