0

开始活动SessionManager.java错误通过意向

package com.example.healthtracker; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 

public class SessionManager { 

    private Context c; 
    private SharedPreferences session; 
    private String uname="username"; 
    private String uid="userID"; 
    private String status="IsLoggedIn"; 
    int PRIVATE_MODE = 0; 
    ////////////////////methods/////////////////////////////////////// 
    public SessionManager(Context c) { 
     session= c.getSharedPreferences("Session", PRIVATE_MODE); 
    } 

    public void createLoginSession(String name,int id){ 
     Editor e=session.edit(); 
     e.putString(uname, name); 
     e.putInt(uid, id); 
     e.putBoolean(status, true); 
     e.commit(); 
    } 

    public String[] getUserDetails(){ 
     String[] a= new String[2]; 
     Integer id=session.getInt(uid,-1); 
     a[0]=(String) session.getString(uname, null); 
     a[1]=id.toString(); 
     return a;// string array containing userId and user name 
    } 

    /** 
    * Check login method will 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()){ 
      // user is not logged in redirect him to Login Activity 
      Intent i = new Intent(c, 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 
      c.startActivity(i); 
     } 

    } 

    // return status 
    public boolean isLoggedIn(){ 
     return session.getBoolean(status, false); 
    } 

    // clear logged user data 
    public void logout(){ 
     Editor e = session.edit(); 
     e.clear(); 
     e.commit(); 


     //redirecting to login page 
     Intent i = new Intent(c,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 
     c.startActivity(i); 
    } 


} 

Profile.java

package com.example.healthtracker; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class Profile extends Activity { 

    SessionManager session; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_profile); 


    /////////////////////////done setup/////////////////////////////////////////////////////////////////////// 
     /** 
     * Call this function whenever you want to check user login 
     * This will redirect user to LoginActivity is he is not 
     * logged in 
     * */ 
     final EditText e1= (EditText) findViewById(R.id.sData1); 
     final EditText e2= (EditText) findViewById(R.id.sData2); 
     Button b1= (Button) findViewById(R.id.LogoutSession); 
     session = new SessionManager(getApplicationContext()); 
     b1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       if(session.isLoggedIn()) 
       { 
        String[] details= session.getUserDetails(); 
        e1.setText(details[0]);// not working 
        e2.setText(details[1]);// not working 
        session.logout();// error 
       } 
       else 
        Toast.makeText(getApplicationContext(), "not logged",Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     //session.checkLogin(); 
    } 



} 

在姿态的活动我想有,当有明确的点击退出按钮用户数据(用户名,user_id,状态)保存在sharedPreferences中。同样在点击它之后,应该将用户重定向到登录页面。 但我的应用程序崩溃时,我点击注销按钮。以下是来自logcat的日志

06-10 04:54:14.664: W/dalvikvm(2761): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
06-10 04:54:14.764: E/AndroidRuntime(2761): FATAL EXCEPTION: main 
06-10 04:54:14.764: E/AndroidRuntime(2761): java.lang.NullPointerException 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.content.ComponentName.<init>(ComponentName.java:75) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.content.Intent.<init>(Intent.java:3491) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at com.example.healthtracker.SessionManager.logout(SessionManager.java:71) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at com.example.healthtracker.Profile$1.onClick(Profile.java:40) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.view.View.performClick(View.java:4204) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.view.View$PerformClick.run(View.java:17355) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.os.Handler.handleCallback(Handler.java:725) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.os.Looper.loop(Looper.java:137) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-10 04:54:14.764: E/AndroidRuntime(2761):  at dalvik.system.NativeStart.main(Native Method) 

我是Android新手。任何人都可以帮我找出我在这里做错了什么吗?

+6

可能重复[什么是NullPointerException,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix - ) –

+0

看到我的回答波纹管 –

回答

2

上下文Ç你正在使用的null.To解决这个在您的SessionManager构造分配你已宣布为c上下文你在构造函数中

public SessionManager(Context c) { 
    this.c=c; 
} 
+0

是的,你是对的.. – smasher

0

获得上下文替换此方法

public SessionManager(Context c) { 
     session= c.getSharedPreferences("Session", PRIVATE_MODE); 
    } 

public SessionManager(Context c) { 
     this.c =c; 
     session= c.getSharedPreferences("Session", PRIVATE_MODE); 
    } 

您的上下文c为null这从来没有分配这就是为什么你面临错误。