2014-11-17 1 views
0

저는 main이라는 액티비티를 가지고 있고, 다른 하나는 signin과 settings입니다. 로그인 한 상태에서 내 아이디를 저장하고 다음에 응용 프로그램이 내 집 activity.Instance에서 열립니다. 설정에서 버튼 이름을 사인 아웃하고 SignIn 활동 page.But 사용자가 걸리는 누르면 나는 버튼을 누르면 응용 프로그램이 system.exit (1) 호출 한 것처럼 모든 활동을 종료해야합니다. 대신 집 활동에 나를 소요공유 환경 설정을 구현하는 동안 논리적 오류가 발생했습니다.

세션 관리자

SharedPreferences pref; 

    // Editor for Shared preferences 
    Editor editor; 

    // Context 
    Context _context; 

    // Shared pref mode 
    int PRIVATE_MODE = 0; 

    // Sharedpref file name 
    private static final String PREF_NAME = "AndroidHivePref"; 

    // All Shared Preferences Keys 
    private static final String IS_LOGIN = "IsLoggedIn"; 

    // User name (make variable public to access from outside) 
    public static final String KEY_ID = "id"; 

    // Email address (make variable public to access from outside) 
    // public static final String KEY_EMAIL = "email"; 

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

    } 


    public void createLoginSession(String id){ 
     // Storing login value as TRUE 
     editor.putBoolean(IS_LOGIN, true); 

     // Storing name in pref 
     editor.putString(KEY_ID, id); 

     // Storing email in pref 
     // editor.putString(KEY_EMAIL, email); 

     // commit changes 
     editor.commit(); 
    } 

    /** 
    * Check login method wil check user login status 
    * If false it will redirect user to login page 
    * Else won't do anything 
    * */ 
    public boolean checkLogin(){ 
     // Check login status 
     if(!this.isLoggedIn()){ 

      return false; 
     } 
     else 
     { 
      return true; 
     } 

    } 



    /** 
    * Get stored session data 
    * */ 
    public HashMap<String, String> getUserDetails(){ 
     HashMap<String, String> user = new HashMap<String, String>(); 
     // user name 
     user.put(KEY_ID, pref.getString(KEY_ID, null)); 

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

     // return user 
     return user; 
    } 

    /** 
    * Clear session details 
    * */ 
    public void logoutUser(){ 
     // Clearing all data from Shared Preferences 
     editor.clear(); 
     editor.commit(); 

    // After logout redirect user to Login Activity 
     Intent i = new Intent(_context, SignInActivity.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); 
    } 


    /** 
    * Quick check for login 
    * **/ 
    // Get Login State 
    public boolean isLoggedIn(){ 
     return pref.getBoolean(IS_LOGIN, false); 
    } 

로그인했습니다

TextView forgetPassword,newAccount,guest; 
    EditText emailEditText,passwordEditText; 
    private Button signIn; 



    private int user_check=1; 
    private Editor editor; 
    SessionManager session; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     //requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.activity_signin); 

     session = new SessionManager(getApplicationContext()); 

     emailEditText=(EditText)this.findViewById(R.id.emailEditText); 

     passwordEditText=(EditText)this.findViewById(R.id.passwordEditText); 

     //forgetPassword= (TextView) findViewById(R.id.signup); 
     newAccount= (TextView) findViewById(R.id.signup); 

     signIn = (Button) findViewById(R.id.signInButton); 
     guest=(TextView) findViewById(R.id.guest); 

     newAccount.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent i=new Intent(SignInActivity.this, SignUpActivity.class); 
       startActivity(i); 

      } 
     }); 

     signIn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       SignInModel signInModel = new SignInModel(); 

       String email = emailEditText.getText().toString().trim(); 
       String password = passwordEditText.getText().toString().trim(); 


       if(FormHelper.isValidEmail(email)) 
      { 
       signInModel.setEmail(email); 
       signInModel.setPassword(password); 

       //Utility.showMessage(SignInActivity.this, signInModel.getEmail()+" "+signInModel.getPassword()); 

       if(haveNetworkConnection()==true) 
       { 

       new SignInTask(SignInActivity.this,signInModel).execute(); 

       } 
       else 
       { 
        Toast.makeText(SignInActivity.this, "Check Your Internet Connection", Toast.LENGTH_LONG).show(); 
       } 

//    if(signInModel.getStatus()==true) 
//    { 
////     Intent i=new Intent(SignInActivity.this, HomeActivity.class); 
////     i.putExtra("user_check",1); 
////     startActivity(i); 
//     //finish(); 
//     
//    } 
//    else 
//    { 
//     Toast.makeText(SignInActivity.this, "Enter valid email and password",Toast.LENGTH_LONG).show(); 
//     
//    } 
//    
//    
//    //finish(); 
//    
      } 
      else 
       { 
        Toast.makeText(SignInActivity.this, "Enter email and password",Toast.LENGTH_LONG).show(); 
       } 







      } 
     }); 



     guest.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

//    editor.putInt(user_check, 0); 
//    editor.apply(); 



       Intent i=new Intent(SignInActivity.this, HomeActivity.class); 
       i.putExtra("user_check",0); 
       startActivity(i); 
       finish(); 


      } 
     }); 

    } 



    public void signInDataLoaded(SignInModel signIn) 
    { 
     //Utility.showMessage(this, signIn.getStatus()+" "+signIn.getUserId()); 


     if(signIn.getStatus()==true) 
     { 
      //Utility.showMessage(this, "Login Successfull! User: "+signIn.getUserId()); 

      //SessionManager.getCurrrentSession().setCurrentUser(signIn.getUserId()); 

//   Intent i=new Intent(SignInActivity.this, HomeActivity.class); 
//   startActivity(i); 
//   finish(); 
      session.createLoginSession(signIn.getUserId()); 

      Intent i=new Intent(SignInActivity.this, HomeActivity.class); 
      i.putExtra("user_check",1); 
      startActivity(i); 
      finish(); 
     } 
     else 
     { 
      Toast.makeText(SignInActivity.this, "Enter valid email and password",Toast.LENGTH_LONG).show(); 

     } 



    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     //getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     return super.onOptionsItemSelected(item); 
    } 


    private boolean haveNetworkConnection() { 
     boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 
     return haveConnectedWifi || haveConnectedMobile; 
    } 


    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) { //Back key pressed 
      //Things to Do 
      AlertDialog.Builder alertDialog = new AlertDialog.Builder(SignInActivity.this); 

      // Setting Dialog Title 
      alertDialog.setTitle("Confirm Exit..."); 

      // Setting Dialog Message 
      alertDialog.setMessage("Are you sure you want to exit?"); 

      // Setting Icon to Dialog 
      alertDialog.setIcon(drawable.cancel); 

      // Setting Positive "Yes" Button 
      alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int which) { 

       // Write your code here to invoke YES event 
       // Toast.makeText(getApplicationContext(), "You clicked on YES", Toast.LENGTH_SHORT).show(); 

         System.exit(1); 
       } 
      }); 

      // Setting Negative "NO" Button 
      alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
       // Write your code here to invoke NO event 
       //Toast.makeText(getApplicationContext(), "You clicked on NO", Toast.LENGTH_SHORT).show(); 
       dialog.cancel(); 
       } 
      }); 

      // Showing Alert Message 
      alertDialog.show(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

signinorout 내 로그 아웃 버튼입니다

설정

내 집 활동에서
signInOrOut.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       // SessionManager.getCurrrentSession().setCurrentUser(null); 
       session.logoutUser(); 
       Intent i=new Intent(SettingsActivity.this, SignInActivity.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

       // Add new Flag to start new Activity 
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(i); 
       finish(); 
      } 
     }); 

내가이 작업을 완료하지 않은하지만 난

답변

0
Intent.flag_activity_clear_top 설정에서 내 모든 이전 활동을 삭제했다
Intent i = new Intent(_context, SignInActivity.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); 

이렇게하려면 두 번째 줄과 세 번째 줄을 주석 처리를 제거해야합니다.

+0

실제로 내 설정에서 호출했습니다. 확인하십시오. @ orest – Fay007

+0

FLAG_ACTIVITY_NEW_TASK을 (를) 추가하지 않는 이유는 무엇입니까? –

+0

문제가 동일하지만 @Orest를 추가했습니다. – Fay007

관련 문제