2016-07-09 14 views
1

Ich weiß nicht, was in meinem Code falschERROR: auf einer Null-Objekt Referenz

das ist mein Fragment Klasse

package com.example.gandi.symanlub; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class Reminder extends Fragment { 

    Button btnubah, btnkeluar; 
    SessionManager session; 

    View rootview; 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     rootview = inflater.inflate(R.layout.fragment_reminder, container, false); 

     btnkeluar = (Button)rootview.findViewById(R.id.btnlogout); 
     btnkeluar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       session.logoutUser(); 
      } 
     }); 

     return rootview; 

    } 

} 

und das ist mein SessionManager.java

package com.example.gandi.symanlub; 

@SuppressLint("CommitPrefEdits") 
public class SessionManager { 
    // Shared Preferences 
    SharedPreferences pref; 

    // Editor for Shared preferences 
    SharedPreferences.Editor editor; 

    // Context 
    Context _context; 

    // Shared pref mode 
    int PRIVATE_MODE = 0; 

    // nama sharepreference 
    private static final String PREF_NAME = "Sesi"; 

    // All Shared Preferences Keys 
    private static final String IS_LOGIN = "IsLoggedIn"; 
    public static final String KEY_EMAIL = "email"; 
    public static final String KEY_PASS = "pass"; 



    // Constructor 
    public SessionManager(Context context){ 
     this._context = context; 
     pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
     editor = pref.edit(); 
    } 

    /** 
    * Create login session 
    * */ 
    public void createLoginSession(String email, String pass){ 
     // Storing login value as TRUE 
     editor.putBoolean(IS_LOGIN, true); 

     editor.putString(KEY_EMAIL, email); 
     editor.putString(KEY_PASS, pass); 
     editor.commit(); 
    } 

    /** 
    * Check login method wil check user login status 
    * If false it will redirect user to login page 
    * Else won't do anything 
    * */ 
    public void checkLogin(){ 
     // Check login status 
     if(!this.isLoggedIn()){ 
      Intent i = new Intent(_context, Login.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      _context.startActivity(i); 
      //((Activity)_context).finish(); 
     } 

    } 

    /** 
    * Get stored session data 
    * */ 
    public HashMap<String, String> getUserDetails(){ 
     HashMap<String, String> user = new HashMap<String, String>(); 

     user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null)); 
     user.put(KEY_PASS, pref.getString(KEY_PASS, null)); 

     return user; 
    } 

    /** 
    * Clear session details 
    * */ 
    public void logoutUser(){ 
     editor.clear(); 
     editor.commit(); 
    } 

    public void hapussesi(){ 
     editor.clear(); 
     editor.commit(); 
    } 

    public boolean isLoggedIn(){ 
     return pref.getBoolean(IS_LOGIN, false); 
    } 
} 

der Fehler, wenn ich das Projekt ausführen:

java.lang.NullPointerException: Der Versuch, virtuelle Methode 'Leere com.example.gandi.symanlub.SessionManager.logoutUser()' auf ein Null-Objekt Verweis aufrufen

Antwort

1

Sie bekommen einen Fehler, da an dieser Linie Sie anrufen:

session.logoutUser(); 

Während Sitzung ist null, weil es überall nicht initialisiert wird. Sie müssen eine Zeile hinzufügen, um es zu initialisieren, bevor es zu benutzen (Sie können es tun, in onCreateView oder in onAttach oder überall Sie sehen Sitz):

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    session = new SessionManager(getActivity()); 

getActivity verwendet wird, eine Context zu Ihrem Konstruktor übergeben, wie ich Sehen Sie, es braucht diesen Parameter.

+0

mein Fehler .. danke, Problem gelöst !! – Megandi

+0

Kein Problem, Bruder. Überlege dir, die Antwort zu akzeptieren, wenn es dir hilft. Freundliche Grüße. – Vucko

+0

Ja, in Betracht ziehen, die einfachste und einfachste Antwort zu akzeptieren :) –

1

Setzen Sie diese in onCreate():

session = new SessionManager(getActivity()); 
+0

Hah, kopiere meinen Code: D (GetActivity Teil war nicht vor ein paar Sekunden) – Vucko

+0

Nun, ich war mir nicht sicher über die Argumente, also habe ich es empy, aber Sie erinnerte mich, dass zumindest der Kontext wäre dankend ^^ –

+0

Sie würden denken, ein Gentlemen würde ein Plus geben, um die Richtigkeit unserer Antworten zu erkennen: D Besonders Sie, seit Sie kopiert haben:] – Vucko

Verwandte Themen