2017-06-30 14 views
-2

私はログインの後にSharedPreferencesを設定しますが、ログイン時にSharedPreferencesを設定するとログインアクティビティが発生しますが、SharedPreferencesは常にエラーポインタです。私はトーストで値を表示しようとし、すべての変数は価値があります。この私の活動Android SharedPreferences nullポインタ

public class LoginNewActivity extends Activity { 

    public SessionManager session; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TextView toRegister = (TextView) findViewById(R.id.link_to_register); 
     toRegister.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent i = new Intent(getApplicationContext(), RegisterActivity.class); 
       startActivity(i); 
      } 
     }); 

     final EditText etUsnm = (EditText) findViewById(R.id.tuserid); 
     final EditText etPswd = (EditText) findViewById(R.id.tpasswd); 
     Button bLogin = (Button) findViewById(R.id.btnLogin); 
     bLogin.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String username = etUsnm.getText().toString(); 
       String password = etPswd.getText().toString(); 
       new UserLoginTask().execute(username, password); 
      } 
     }); 
    } 

    public class UserLoginTask extends AsyncTask<String, String, JSONObject> { 

     ProgressDialog pdLoading = new ProgressDialog(LoginNewActivity.this); 
     HttpURLConnection conn; 
     URL url = null; 
     JSONParser jsonParser = new JSONParser(); 

     private static final String TAG_MESSAGE = "message"; 
     private static final String TAG_NAMA = "nama_user"; 
     private static final String TAG_USERNAME = "username"; 
     private static final String TAG_HAKAKSES = "role"; 
     private static final String TAG_ERROR = "error"; 
     private static final String LOGIN_URL = "http://192.168.1.101/mlls/getLoginNew.php"; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      //this method will be running on UI thread 
      pdLoading.setMessage("\tLoading..."); 
      pdLoading.setCancelable(false); 
      pdLoading.show(); 

     } 

     @Override 
     protected JSONObject doInBackground(String... args) { 
      try { 

       HashMap<String, String> params = new HashMap<>(); 
       params.put("username", args[0]); 
       params.put("password", args[1]); 

       Log.d("request", "starting"); 

       JSONObject json = jsonParser.makeHttpRequest(
         LOGIN_URL, "POST", params); 

       if (json != null) { 
        Log.d("JSON result", json.toString()); 

        return json; 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     protected void onPostExecute(JSONObject json) { 
      String nama = ""; 
      int iduser = 0; 
      String email = ""; 
      String hakakses = ""; 
      int error_message = 0; 


      if (json != null) { 
       //Toast.makeText(LoginActivity.this, json.toString(), 
       //Toast.LENGTH_LONG).show(); 

       try { 
        nama = json.getString(TAG_NAMA); 
        email = json.getString(TAG_USERNAME); 
        hakakses = json.getString(TAG_HAKAKSES); 
        error_message = json.getInt(TAG_ERROR); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
      if(error_message == 1) { 
       pdLoading.dismiss(); 
       session.setLogin(true); 
       session.setStatus(hakakses); 
       session.setNama(nama); 
       session.setUsername(email); 
       session.setId(iduser); 

       Toast.makeText(LoginNewActivity.this, hakakses, 
       Toast.LENGTH_LONG).show(); 

        //Intent intent = new Intent(LoginNewActivity.this, LessonListActivity.class); 
        //intent.putExtra("nama", nama); 
        //intent.putExtra("email", email); 
        //intent.putExtra("hakakses", hakakses); 
        //startActivity(intent); 
        //LoginNewActivity.this.finish(); 
      }else{ 
       Toast.makeText(getApplicationContext(), "User ID atau Password anda salah.", Toast.LENGTH_LONG).show(); 
      } 

     } 
    }} 

と、これは

public class SessionManager { 
    private static String TAG = SessionManager.class.getSimpleName(); 

    SharedPreferences pref; 

    Editor editor; 
    Context _context; 

    int PRIVATE_MODE = 0; 

    private static final String PREF_NAME = "Hlls"; 
    private static final String KEY_IS_LOGGEDIN = "isLoggenIn"; 
    private static final String KEY_IS_USER = "isStatus"; 
    private static final String KEY_IS_NAMA = "isNama"; 
    private static final String KEY_IS_USERNAME = "isUsername"; 
    private static final String KEY_IS_IDUSER = "isIdUser"; 

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

    public void setLogin(boolean isLoggedIn){ 
     editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn); 
     editor.commit(); 
     Log.d(TAG, "User login session modified"); 
    } 

    public void setId(int isIdUser){ 
     editor.putInt(KEY_IS_IDUSER, isIdUser); 
     editor.commit(); 
     Log.d(TAG, "ID User akses session modified"); 
    } 

    public void setStatus(String isStatus){ 
     editor.putString(KEY_IS_USER, isStatus); 
     editor.commit(); 
     Log.d(TAG, "User akses session modified"); 
    } 

    public void setNama(String isNama){ 
     editor.putString(KEY_IS_NAMA, isNama); 
     editor.commit(); 
     Log.d(TAG, "Username session modified"); 
    } 

    public void setUsername(String isUsername){ 
     editor.putString(KEY_IS_USERNAME, isUsername); 
     editor.commit(); 
     Log.d(TAG, "Username session modified"); 
    } 

    public String isNama(){ 
     return pref.getString(KEY_IS_NAMA, ""); 
    } 

    public int isId(){ 
     return pref.getInt(KEY_IS_IDUSER, 0); 
    } 

    public String isUsername(){ 
     return pref.getString(KEY_IS_USERNAME, ""); 
    } 


    public boolean isLoggedIn(){ 
     return pref.getBoolean(KEY_IS_LOGGEDIN, false); 
    } 

    public String isStatus(){ 
     return pref.getString(KEY_IS_USER, ""); 
    } 
} 

ではなく、プライベートモードのプライベートの悪い英語

+0

あなたは 'session'を作成せず、それだけを使用します。 –

答えて

1

よう

何かをしようとすると、一般的な慣行としてシングルトンクラスにしてくださいヌル値を持つ オブジェクト参照を使用します。

ONCREATEセクションでこれを呼び出す必要があります。

session = new SessionManager(LoginNewActivity.this); 

あなたのSessionManagerのクラスのオブジェクトを作成していないので、そのコンストラクタが取得することはありません:あなたは、あなたのActivityで次の操作を行う必要があり

session=new SessionManager(LoginNewActivity.this); 

最後に

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    session=new SessionManager(LoginNewActivity.this); 
0

使用モード

pref = _context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); 

のため申し訳ありませんが、このエラーのために私を助けて、私のsharedPreferencesですそれはあなたがそれに他のフラグを割り当てる必要はありませんアンドロイド自体によって提供されるフラグです。

セッションマネージャのコンテキストが初期化されていません。

0

私はあなたのShared Preferenceクラスを初期化していないと思います。その真の

場合

SessionManager session = new SessionManager(this); 

にNullPointerExceptionがアプリケーションの試みスローされます。この

 public final class PreferenceManager { 

private static SharedPreferences preferences; 

    /** 
    * Private constructor to restrict the instantiation of class. 
    */ 
    private PreferenceManager() { 
     throw new AssertionError(); 
    } 
     public static SharedPreferences getInstance(Context context) { 
     if (preferences == null && context != null) { 
      preferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); 
      } 
     return preferences; 
    } 

    } 
0

あなたはNPEを取得します。

関連する問題