注销按钮导致我的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都具有错误行它说,它不能被解析到一个变量,但我看不要求任何声明
堆栈跟踪告诉你,例如问题出在UserFunctions的第115行。
这是吗? (你不应该使用参数context
?)
_context.startActivity(i);
或者这个?
editor.clear();
编辑:
UserFunctions在logoutUser通话的前行创建。如果您没有在UserFunctions的构造函数中初始化它们,则_context
和editor
将为空。
试试这个:
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;
}
呵呵第115行确实是editor.clear();仍然不明白它有什么问题呢? – user4068130 2014-09-22 21:08:08
我更新了我的答案,现在注销用户只使用上下文参数 – pomber 2014-09-22 21:23:12
我能得到它与 INT PRIVATE_MODE = 0 initialazing private_mode工作; pomber用public static final String PREF_NAME =“whatever”初始化的答案; 给了我想法
是的一切都被宣布。 – user4068130 2014-09-22 20:53:20
你是如何宣布他们的? – pomber 2014-09-22 20:55:40
我已经用它们在sessionmanager类编辑器编辑器中声明的方式声明了它; \t Context _context; – user4068130 2014-09-22 21:09:51