注销按钮导致我的Android应用程序崩溃

问题描述:

嗨,即时通讯尝试建立一个Android应用程序与帐户功能使用JSON与MYSQL。我能够登录,但每当我退出这会导致系统崩溃的onclick事件注销按钮导致我的Android应用程序崩溃

代码片段

public void onClick(DialogInterface dialog,int which) { 
        UserFunctions logout = new UserFunctions(); 
        logout.logoutUser(getActivity()); 

这里是我的注销功能从我userfunctions类

public boolean logoutUser(Context context){ 
     // 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); 

     return true; 

logcat的报告

09-22 16:47:11.278: E/AndroidRuntime(1455): FATAL EXCEPTION: main 
09-22 16:47:11.278: E/AndroidRuntime(1455): Process: com.learn2crack.tab, PID: 1455 
09-22 16:47:11.278: E/AndroidRuntime(1455): java.lang.NullPointerException 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at com.learn2crack.library.UserFunctions.logoutUser(UserFunctions.java:115) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at com.learn2crack.tab.Profile$2.onClick(Profile.java:92) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at android.os.Handler.dispatchMessage(Handler.java:102) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at android.os.Looper.loop(Looper.java:136) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-22 16:47:11.278: E/AndroidRuntime(1455):  at dalvik.system.NativeStart.main(Native Method) 

我已经做了一些更多的寻找答案,并提出了添加此鳕鱼Ë

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

但PREF_NAME,PRIVATE_MODE都具有错误行它说,它不能被解析到一个变量,但我看不要求任何声明

+0

是的一切都被宣布。 – user4068130 2014-09-22 20:53:20

+0

你是如何宣布他们的? – pomber 2014-09-22 20:55:40

+0

我已经用它们在sessionmanager类编辑器编辑器中声明的方式声明了它; \t Context _context; – user4068130 2014-09-22 21:09:51

堆栈跟踪告诉你,例如问题出在UserFunctions的第115行。

这是吗? (你不应该使用参数context?)

_context.startActivity(i); 

或者这个?

editor.clear(); 

编辑:
UserFunctions在logoutUser通话的前行创建。如果您没有在UserFunctions的构造函数中初始化它们,则_contexteditor将为空。

试试这个:

public static final String PREF_NAME = "whatever"; 

public boolean logoutUser(Context context){ 
     SharedPreferences pref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = pref.edit(); 

     // 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); 

     return true; 
} 
+0

呵呵第115行确实是editor.clear();仍然不明白它有什么问题呢? – user4068130 2014-09-22 21:08:08

+0

我更新了我的答案,现在注销用户只使用上下文参数 – pomber 2014-09-22 21:23:12

我能得到它与 INT PRIVATE_MODE = 0 initialazing private_mode工作; pomber用public static final String PREF_NAME =“whatever”初始化的答案; 给了我想法

+0

发布答案的要点是什么?用解决方案编辑原始问题。 – gipi 2014-09-22 21:35:31

+0

你不应该使用PRIVATE_MODE = 0,请使用[Context.MODE_PRIVATE](http://developer.android.com/reference/android/content/Context.html#MODE_PRIVATE)。 – pomber 2014-09-22 21:38:49