2013-07-29 46 views
14

Tôi đang quản lý phiên sử dụng tùy chọn được chia sẻ trong ứng dụng của mình. Nếu người dùng đăng nhập, nó phải hiển thị hoạt động ở nhà, nếu không nó phải hiển thị hoạt động đăng nhập.Hoạt động đăng nhập Android và chuyển hướng Hoạt động tại nhà

Với sự giúp đỡ của http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

tôi đã cố gắng để tạo ra nhà và chuyển hướng đến hoạt động đăng nhập nếu người dùng không đăng nhập.

là quyền này ?, hay là có bất kỳ giải pháp tốt hơn.

Cảm ơn, Bennet.

+0

Nếu ứng dụng của bạn chỉ cửa hàng 1 tên đăng nhập và mật khẩu, sau đó phương pháp của bạn là hoàn hảo, không cần phải thay đổi nó. Nhưng nếu bạn sẽ có nhiều người dùng, nó được khuyến khích sử dụng Cơ sở dữ liệu SQLite. –

+1

Hi Stealz, thông tin đăng nhập thực tế được kiểm tra trong máy chủ từ xa. không có trong thiết bị di động. tùy chọn chia sẻ được sử dụng để chỉ lưu trữ một thông tin người dùng. – Bennet

Trả lời

0

Theo kinh nghiệm của tôi, tôi cũng sử dụng các tùy chọn được chia sẻ cho chuyển hướng Trang đăng nhập/Trang chủ. Sự khác biệt duy nhất là, trang đầu tiên của tôi là một màn hình giật gân mà tôi hiển thị trong một khoảng thời gian nhất định. Sau đó tôi kiểm tra trạng thái đăng nhập với các tùy chọn chia sẻ và thực hiện chuyển hướng cần thiết.

Một điểm cần lưu ý ở đây, một số máy chủ yêu cầu bạn gửi yêu cầu đăng nhập mới sau một khoảng thời gian nhất định (giá trị cấu hình được gửi từ máy chủ như một phần của phản hồi đăng nhập). Vì vậy, bạn có thể muốn xem xét điều đó. Trong một ứng dụng khác của tôi, tôi cần gửi yêu cầu đăng nhập mỗi khi ứng dụng được khởi chạy, vì vậy tôi chỉ lưu trữ giá trị đăng nhập (userName/Pass) trong phần prefs được chia sẻ sau lần đăng nhập đầu tiên và thực hiện phần đăng nhập một cách im lặng (không có hiển thị màn hình đăng nhập) sau màn hình giật gân. Vì vậy, tất cả phụ thuộc vào yêu cầu của bạn. Nhưng trong tất cả các ứng dụng của tôi, tôi chỉ sử dụng các prefs được chia sẻ.

Có thể ai đó khác có thể đề xuất phương pháp tiếp cận tốt hơn.

+0

Cảm ơn, Điều đó có vẻ là ý tưởng hay. Nhưng, trường hợp của tôi tôi thích đăng nhập facebook trong android. hoàn toàn giống như vậy. – Bennet

9

Đây là những gì Im làm khi đăng nhập người sử dụng trong:

 private static final String APP_SHARED_PREFS = "asdasd_preferences"; 
    SharedPreferences sharedPrefs; 
    Editor editor; 
    private boolean isUserLoggedIn; 

    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    editor = sharedPrefs.edit(); 
    editor.putBoolean("userLoggedInState", true); 
    editor.putInt("currentLoggedInUserId", userId); 
    editor.commit(); 

    Intent signupSuccessHome = new Intent(this, Home.class); 
    signupSuccessHome.putExtra("reqFrom", "login"); 
    startActivity(signupSuccessHome); 
    finish(); 

trong hoạt động cơ sở mà mọi hoạt động của tôi kéo dài (nó chứa actionbar và menu trượt) Tôi có kiểm tra sau: (MainActivity được đăng nhập của tôi/đăng ký màn hình nếu người dùng không đăng nhập trong im gửi chúng ở đó)

@Override 
protected void onResume() { 
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    if (!isUserLoggedIn) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 
    super.onResume(); 
} 

@Override 
protected void onRestart() { 
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    if (!isUserLoggedIn) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 
    super.onRestart(); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sharedPrefs = getApplicationContext().getSharedPreferences(APP_SHARED_PREFS, Context.MODE_PRIVATE); 
    isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    currentlyLoggedInUser = sharedPrefs.getInt("currentLoggedInUserId", 0); 
    currentlyLoggedInUserString = Integer.toString(currentlyLoggedInUser); 
    if (!isUserLoggedIn) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 

và để ngăn chặn người dùng sẽ trở lại màn hình đăng nhập. trong Login.java:

isUserLoggedIn = sharedPrefs.getBoolean("userLoggedInState", false); 
    if (isUserLoggedIn) { 
     Intent intent = new Intent(this, Home.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 

trong Home.java:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(this, Home.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
    finish(); 
    super.onBackPressed(); 
} 
+2

Bạn có đặt hoạt động đăng nhập của mình làm trình khởi chạy không? –

Các vấn đề liên quan