2016-07-09 3 views
1

Я не знаю, что это неправильно в моем кодеОШИБКА: на объектную ссылку нулевой

это мой фрагмент класса

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; 

    } 

} 

и это мой 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); 
    } 
} 

Ошибка при запуске проекта:

java.lang.NullPointerException: Попытка вызвать виртуальный метод 'аннулируются com.example.gandi.symanlub.SessionManager.logoutUser()' на нулевой ссылки на объект

ответ

1

вы получаете сообщение об ошибке, потому что в этой линии вы звоните:

session.logoutUser(); 

Хотя сессия является недействительным, так как он не инициализирован в любом месте. Вам нужно добавить строку инициализации перед использованием (вы можете сделать это в onCreateView или в onAttach или где вы посчитаете нужным):

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

getActivity используется передать Context в конструкторе, как я см. этот параметр принимает этот параметр.

+0

мой ошибка .. спасибо, проблема решен !! – Megandi

+0

Без проблем. Подумайте о принятии ответа, если он вам поможет. С наилучшими пожеланиями. – Vucko

+0

Да, подумайте о принятии самого простого и простого ответа :) –

1

Put это в OnCreate():

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

Hah, копируя мой код: D (getActivity часть не была там несколько секунд назад) – Vucko

+0

Ну, я не был уверен в аргументах, поэтому я оставил его empy, но вы напомнили мне, что хотя бы контекст будет постигнут ^^ –

+0

Вы могли бы подумать, что джентльмены дали бы друг другу плюсы, чтобы узнать правильность наших ответов: D Особенно вы, поскольку вы скопировали:] – Vucko

Смежные вопросы