2014-09-26 116 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 - 我认为它说,所有你需要 – 2014-09-26 09:03:52

+1

什么是会话,并在那里你初始化? – 2014-09-26 09:06:15

+0

不是正确的地方问 – 2014-09-26 09:06:28

回答

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 2014-09-26 09:17:38

+0

后的初始化文件中? – 2014-09-26 09:18:11

0

问题是因为你没有初始化SessionManager类。所以在onCreateView()方法中初始化它。像

session = new SessionManager(); 

,如果它有一个上下文那么这一个

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

感谢您的回复,但我已初始化它我只是没有包括它在错误的帖子 – user4068130 2014-09-26 09:18:29

+0

检查是你的_context变量为空? – Piyush 2014-09-26 09:19:21