2014-09-26 4 views
-1

Я пытаюсь создать приложение для Android с помощью простого входа и выход из приложения из этого учебника http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/Кнопка выхода из строя вызывает сбой?

НО выход из вызывает приложение к краху Logcat отчета

09-26 04:53:03.204: E/AndroidRuntime(1926): FATAL EXCEPTION: main 
09-26 04:53:03.204: E/AndroidRuntime(1926): Process: com.learn2crack.tab, PID: 1926 
09-26 04:53:03.204: E/AndroidRuntime(1926): java.lang.NullPointerException 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at com.learn2crack.tab.Attendance$1.onClick(Attendance.java:53) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at android.view.View.performClick(View.java:4438) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at android.view.View$PerformClick.run(View.java:18422) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at android.os.Handler.handleCallback(Handler.java:733) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at android.os.Handler.dispatchMessage(Handler.java:95) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at android.os.Looper.loop(Looper.java:136) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-26 04:53:03.204: E/AndroidRuntime(1926):  at dalvik.system.NativeStart.main(Native Method) 

функции для выхода из

SessionManager session; 
    AlertDialogManager alert = new AlertDialogManager(); 
public void logoutUser(){ 



    // Clearing all data from Shared Preferences 
    editor.clear(); 
    editor.commit(); 

    // After logout redirect user to Loing Activity 
    Intent i = new Intent(_context, Login.class); 
    // Closing all the Activities 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    // Add new Flag to start new Activity 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    // Staring Login Activity 
    _context.startActivity(i); 
} 

Класс, который вызывает функцию

public class Attendance extends Fragment{ 
    SessionManager session; 
    AlertDialogManager alert = new AlertDialogManager(); 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
{ 


     View attendance = inflater.inflate(R.layout.attedance, container, false); 





     final ImageButton logoutbtn = (ImageButton)attendance.findViewById(R.id.logoutbtn); 




     logoutbtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 



        // Clear the session data 
        // This will clear all session data and 
        // redirect user to LoginActivity 
        session.logoutUser(); 
       } 
      }); 
     return attendance;} 


} 
+0

java.lang.NullPointerException - Я думаю, что это говорит все, что вам нужно –

+1

, что сессия и где инициализации? –

+0

Неправильное место, чтобы спросить –

ответ

0

Вы не инициализирован свой SessionManager класс, который по этой причине вы получаете NPE:

public class Attendance extends Fragment{ 
    SessionManager session; 
    AlertDialogManager alert = new AlertDialogManager(); 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
    { 
     View attendance = inflater.inflate(R.layout.attedance, container, false); 

     session = new SessionManager(); //<-- Add this 

     final ImageButton logoutbtn = (ImageButton)attendance.findViewById(R.id.logoutbtn); 
     logoutbtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
        // Clear the session data 
        // This will clear all session data and 
        // redirect user to LoginActivity 
        session.logoutUser(); 
       } 
      }); 
     return attendance; 
    } 
} 
+0

благодарю вас за ответ, но я действительно его инициализировал. Я не смог включить его в сообщение – user4068130

+0

, где вы его инициализировали? –

0

Проблема в том, что вы не инициализировать SessionManager класс. Поэтому инициализируйте его в методе onCreateView(). Как

session = new SessionManager(); 

, и если у него есть контекст, то этот один

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

благодарю вас за ответ, но я его инициализировал. Я просто не включил его в сообщение по ошибке. – user4068130

+0

Проверьте, что ваша переменная _context null? – Piyush

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