2015-12-24 2 views
0

Я работаю на экране входа в систему, где мне нужно ввести идентификатор и пароль электронной почты. При успешном входе в систему я хочу сохранить идентификатор электронной почты в разделе «Общие предпочтения», чтобы в следующий раз, когда я захочу войти в систему, t нужно ввести идентификатор электронной почты. Я использую класс SessionManager для выполнения этого.Управление сеансом в Android

1.SessionMAnager.java

public class SessionManager { 
SharedPreferences pref; 
SharedPreferences.Editor editor; 
Context context; 
//Shared Preferences file name 
private static final String PREFERENCE_NAME = "SessionManager"; 
// Shared Preferences Keys 
private static final String IS_USER_LOGIN = "IsUserLoggedIn"; 
//Email Address 
public static final String KEY_EMAIL = "email"; 

//Constructor 
public SessionManager(Context context) { 
    this.context = context; 
    pref = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_MULTI_PROCESS); 
    editor = pref.edit(); 
} 

//Create Login session 
public void createUserLoginSession(String email) { 

    // Storing login value as TRUE 
    editor.putBoolean(IS_USER_LOGIN, true); 
    //Storing email in pref 
    editor.putString(KEY_EMAIL, email); 
    //editor.putBoolean(IS_USER_LOGIN,true); 
    editor.commit(); 
} 

/** 
* Check login method will check user login status 
* If false it will redirect user to login page 
* Else do anything 
*/ 

public boolean checkLogin() { 
    // Check login status 
    if (!this.isUserLoggedIn()) { 

     // user is not logged in redirect him to Login Activity 
     Intent i = new Intent(context, Activity_LogInScreen.class); 

     // Staring Login Activity 
     context.startActivity(i); 

     return true; 
    } 
    return false; 
} 

/** 
* Get stored session data 
*/ 
public HashMap<String, String> getUserDetails() { 

    //Use hashmap to store user credentials 
    HashMap<String, String> user = new HashMap<String, String>(); 

    // user email id 
    user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null)); 

    // return user 
    return user; 
} 

/** 
* Clear session details 
*/ 
public void logoutUser() { 

    // Clearing all user data from Shared Preferences 
    editor.clear(); 
    editor.commit(); 

    // After logout redirect user to Login Activity 
    Intent i = new Intent(context, Activity_LogInScreen.class); 

    // Staring Login Activity 
    context.startActivity(i); 
} 

// Check for login 
public boolean isUserLoggedIn() { 
    return pref.getBoolean(IS_USER_LOGIN, false); 
} 

}

2.Activity_LoginScreen.java

public class Activity_LogInScreen extends Activity implements OnClickListener { 

private EditText editText; 
private EditText editTextpassword; 

private Button btn_SignUp; 
private Button btn_LogIn; 

public String get_User, get_Password; 
private CheckConnectionInternet obj; 
private TransparentProgressDialog dialog; 
private SharedPreferences prefs; 
JSONObject jsonObj; 
public Model_LoginDetails objLoginDetails; 
private ArrayList<Model_LoginDetails> arr_LogInUserDetails = new ArrayList<Model_LoginDetails>(); 
AlmabayDatabase almabayDatabase; 
SQLiteDatabase sqLiteDatabase; 
//SessionManager class 
SessionManager sessionManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_loginscreen); 

    sessionManager = new SessionManager(this); 
    dialog = new TransparentProgressDialog(Activity_LogInScreen.this, R.drawable.loader); 
    prefs = this.getSharedPreferences(Prefs_Registration.pacakgename, Context.MODE_PRIVATE); 
    obj = new CheckConnectionInternet(); 
    almabayDatabase = new AlmabayDatabase(this); 
    editText = (EditText) findViewById(R.id.edt_useremailId); 
    editTextpassword = (EditText) findViewById(R.id.edt_userpassword); 
    editText.getBackground().setColorFilter(Color.parseColor("#ffffff"), 
      PorterDuff.Mode.SRC_ATOP); 
    editTextpassword.getBackground().setColorFilter(
      Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP); 
    // Checking whether database contains the emailID or not 
    /* if (almabayDatabase.getEmailFromAccessTAble() != null) { 
     get_User = almabayDatabase.getEmailFromAccessTAble(); 
     editText.setText(get_User); 
    }*/ 
Boolean userLoogein = sessionManager.isUserLoggedIn(); 
    Log.e("IslOOgedIn", String.valueOf(userLoogein)); 

    // get user data from session 
    HashMap<String, String> user = sessionManager.getUserDetails(); 
    // get email 
    String email = user.get(SessionManager.KEY_EMAIL); 
    Log.e("email",email); 


    btn_SignUp = (Button) findViewById(R.id.btn_SignUp); 
    btn_LogIn = (Button) findViewById(R.id.btn_login); 
    btn_SignUp.setOnClickListener(this); 
    btn_LogIn.setOnClickListener(this); 
} 

@Override 
public void onClick(View arg0) { 
    switch (arg0.getId()) { 
     case R.id.btn_login: 
      get_User = editText.getText().toString(); 
      get_Password = editTextpassword.getText().toString(); 

      if ((get_User.equals("")) || (get_Password.equals(""))) { 
       Toast.makeText(Activity_LogInScreen.this, "Fill Empty Field", Toast.LENGTH_LONG).show(); 
      } else { 
       if (obj.isOnline(Activity_LogInScreen.this) == true) { 
        JARLogIn jar_Login = new JARLogIn(Activity_LogInScreen.this) { 

         private String status_Login; 

         @Override 
         public void result(String object) { 
          Log.e("Respose", object); 
          dialog.show(); 
          try { 
           jsonObj = new JSONObject(object); 
           status_Login = jsonObj.getString("statusCode"); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
if (status_Login.equals("200")) { 

           String user_Id; 
           String access_token; 
           try { 
            JSONObject detailsObject = jsonObj.getJSONObject("detail"); 
            String get_Id = detailsObject.getString("id"); 
            String get_AccsToken = detailsObject.getString("access_token"); 
            String userId = detailsObject.getString("user_id"); 
            JSONObject jsonUserInfo = detailsObject.getJSONObject("userInfo"); 
            JSONObject jsonuser = jsonUserInfo.getJSONObject("userInfo"); 

            //user 
            JSONObject Json_user = jsonuser.getJSONObject("user"); 

            String str_thumbnail_url = Json_user.getString("thumbnail_url"); 
            String str_Name = Json_user.getString("name"); 
            String str_userSkills = Json_user.getString("userSkills"); 

            //create user's login session 
            sessionManager.createUserLoginSession(get_User); 

            // Delete the existing entries of AccessToken table 
            almabayDatabase.deleteAllFromAccessTable(); 

            // Inserting UserID,emailID and access token in the database 
            almabayDatabase.insertIntoAccessTable(Integer.parseInt(get_Id), get_User, get_AccsToken); 

            objLoginDetails = new Model_LoginDetails(detailsObject.getString("id"), detailsObject.getString("user_id"), detailsObject.getString("access_token"), str_thumbnail_url, str_Name, str_userSkills); 
            arr_LogInUserDetails.add(objLoginDetails); 

            save_ValueSession(userId, get_AccsToken, get_User, str_Name, arr_LogInUserDetails, str_thumbnail_url); 
            fun_empty_EditTextFields(); 
           } catch (JSONException e) { 
            e.printStackTrace(); 
           } 

          } else { 

           fun_empty_EditTextFields(); 
           Toast.makeText(Activity_LogInScreen.this, "User not found", Toast.LENGTH_LONG).show(); 

          } 
         } 
private void fun_empty_EditTextFields() { 
          dialog.cancel(); 
          editText.setText(""); 
          editTextpassword.setText(""); 
         } 
        }; 
        jar_Login.execute(get_User, get_Password); 
       } else { 
        Toast.makeText(Activity_LogInScreen.this, 
          "Connection Error", Toast.LENGTH_LONG).show(); 
       } 
      } 

      break; 

     case R.id.btn_SignUp: 
      fun_Intent(Activity_Registeration.class); 
      break; 

     default: 
      break; 
    } 
} 

В Activity_LoginScreen, я хранение EMAILID в общем предпочтении, используя класс диспетчера сеансов

Здесь я получаю NullPointerException.I знаю, что я получаю доступ к общим предпочтениям перед тем, как поместить в него значения. Но если я использую базу данных, она работает для меня. Пожалуйста, помогите мне исправить эту проблему.

+0

Можете ли вы предоставить стек? –

+0

Просьба предоставить Stacktrace, которая может быть лучше для понимания? – Ajinkya

ответ

-1

Проблема, которая возникает в вашем случае, может быть той, где JSONObject может работать над чем-то нулевым. Еще можно сказать, если вы упомянули свой стек.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/17216016) –

+0

Хорошо, спасибо, что остановили мою репутацию тогда, опуская ее. Чтобы те, кто мог знать понятия, но не имели достаточной репутации, в конечном итоге ничего не делают, а просто смотрят. Хороший способ повсеместно распространять сообщество, но все равно глупо. –

+0

Кстати: я не проголосовавший. Я надеюсь, что скоро у вас будет достаточно репутации для комментариев. –

Смежные вопросы