Android登錄的簡(jiǎn)單處理
今天整理一下之前在項(xiàng)目中寫的關(guān)于某些界面需要登錄判斷處理。這里整理了一個(gè)簡(jiǎn)易的 Demo 模擬一下 登錄情況 和 未登錄情況 下的界面跳轉(zhuǎn)處理, 效果如圖:
以上分別模擬了,未登錄和已登錄 情況下的 界面跳轉(zhuǎn)和當(dāng)前界面事件處理。接下來我們來看一下實(shí)現(xiàn)方式。
先從核心代碼開始看:
public class GoLoginUtil { public static final String CLASSNAME = "className"; public static final int CODE_LOGIN = 1; // 登錄成功回調(diào) 用于onActivityForResult 判斷 /** * 登錄成功之后,通過 activityResult 回調(diào)到當(dāng)前界面 * * @param activity * @param intent * @param requestCode */ private static void startActivity(Activity activity, Intent intent, int requestCode) { if (requestCode == -1) { String targetClass = intent.getComponent().getClassName(); // 目標(biāo)類 intent.putExtra(CLASSNAME, targetClass); } intent.setClass(activity, LoginActivity.class); // 跳轉(zhuǎn)重定向到登錄界面 activity.startActivityForResult(intent, requestCode); } /** * 登錄成功之后,直接跳轉(zhuǎn)目標(biāo) Activity * * @param activity * @param intent */ public static void startActivity(Activity activity, Intent intent) { startActivity(activity, intent, -1); } /** * 登錄成功回調(diào)到當(dāng)前界面 * 使用 onActivityResult 方法接收, requestCode = CODE_LOGIN * * @param activity * @param intent */ public static void startActivityForResult(Activity activity, Intent intent) { startActivity(activity, intent, CODE_LOGIN); } }
這里可以看到,最主要的就是第一個(gè) private 修飾的 startActivity 方法,看過 Android Activity 的 startActivity 方法源碼的應(yīng)該知道,它里面其實(shí)就是調(diào)用的 startActivityForResult(intent , -1) . 所以我們這里也來用一下它的寫法。如果 等于 -1 ,那么就說明是有跳轉(zhuǎn)目標(biāo) Activity 的,那么我們就通過 Intent.getComponent().getClassName() 來獲取目標(biāo) Activity 的類名,再次添加到 Intent參數(shù)中,用于我們登錄成功之后的后續(xù)跳轉(zhuǎn)目標(biāo)。當(dāng)然,intent 中的其他參數(shù)是會(huì)一直攜帶著的,這里不用擔(dān)心其他參數(shù)。 不等于 -1 那么就是要進(jìn)行 setResult 回調(diào)了。所以,我們是通過 requestCode 是否等于 -1 來區(qū)分是繼續(xù)跳轉(zhuǎn),還是回調(diào)當(dāng)前界面。 工具類中的下面兩個(gè)方法,就把功能區(qū)分開了,這里基本上看著系統(tǒng)源碼來的。
然后再來進(jìn)行一下二次封裝,這里就需要判斷當(dāng)前 登錄狀態(tài)了,這里我也是模擬一下登錄狀態(tài),代碼如下:
public class IntentUtil { public static boolean isLogin; // 模擬獲取當(dāng)前用戶登錄狀態(tài)。 /** * 需要登錄判斷 * * @param activity * @param clazz * @param bundle */ public static void startToLogin(Activity activity, Class clazz, Bundle bundle) { Intent intent = new Intent(activity, clazz); if (bundle != null) { intent.putExtras(bundle); } if (isLogin) { activity.startActivity(intent); } else { GoLoginUtil.startActivity(activity, intent); } } /** * 登錄成功會(huì)有回調(diào) * requestCode = Contants.CODE_LOGIN * * @param activity * @param bundle */ public static void startToLoginResult(Activity activity, Bundle bundle) { Intent intent = new Intent(); if (bundle != null) { intent.putExtras(bundle); } GoLoginUtil.startActivityForResult(activity, intent); } }
寫到現(xiàn)在這樣,基本上需要進(jìn)行登錄跳轉(zhuǎn)界面的,可以直接調(diào)用 startToLogin 方法,根據(jù)登錄狀態(tài)進(jìn)行跳轉(zhuǎn)。至于 startToLoginResult 方法,目前還需要在調(diào)用時(shí)進(jìn)行判斷一下登錄狀態(tài),進(jìn)行區(qū)分處理,然后還要在 onActivityForResult 方法中進(jìn)行回調(diào)處理,這個(gè)暫時(shí)沒想到其他好的方法,各位大神如果有什么好的處理方式還請(qǐng)多多指教。
這里還沒完呢,我們的登錄界面也是需要一定的處理邏輯去進(jìn)行配合的。我們來看一下怎么去配合:
public class LoginActivity extends FragmentActivity { private String targetClass; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); targetClass = getIntent().getStringExtra(GoLoginUtil.CLASSNAME); // 目標(biāo)跳轉(zhuǎn)類 } public void onLoginClick(View view) { // 模擬登錄成功操作 if (!TextUtils.isEmpty(targetClass)) { // 這里就是執(zhí)行繼續(xù)跳轉(zhuǎn)操作 try { Class clazz = Class.forName(targetClass); getIntent().setClass(this, clazz); startActivity(getIntent()); finish(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } else { // 這里是登錄成功,回調(diào)到之前界面 onActivityForResult()中 方法可根據(jù)自己需求處理。。 setResult(RESULT_OK); finish(); } } }
最后來看一下我們的調(diào)用方式:
/** * 登錄跳轉(zhuǎn) * * @param view */ public void onClick1(View view) { Bundle bundle = new Bundle(); bundle.putString("content", et_content.getText().toString()); IntentUtil.startToLogin(this, LoginSuccessActivity.class, bundle); } /** * 登錄回調(diào) * * @param view */ public void onClick2(View view) { if (!IntentUtil.isLogin) { IntentUtil.startToLoginResult(this, null); } else { tv_text.setText("登錄成功"); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { return; } if (requestCode == CODE_LOGIN) { tv_text.setText("登錄成功"); } }
基本上要整理的就這么多。寫法上的一些不足,還請(qǐng)各位多多指點(diǎn)。
Demo 地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android開發(fā)之登錄驗(yàn)證實(shí)例教程
- Android集成新浪微博第三方登錄的方法
- Android設(shè)計(jì)登錄界面、找回密碼、注冊(cè)功能
- Android實(shí)現(xiàn)登錄功能demo示例
- Android開發(fā)之注冊(cè)登錄方法示例
- 功能強(qiáng)大的登錄界面Android實(shí)現(xiàn)代碼
- Android集成微信登錄的步驟詳解
- Android屬性動(dòng)畫實(shí)現(xiàn)炫酷的登錄界面
- Android調(diào)用第三方QQ登錄代碼分享
- Android開發(fā)實(shí)例之登錄界面的實(shí)現(xiàn)
相關(guān)文章

Android 實(shí)現(xiàn)帶進(jìn)度條的WebView的實(shí)例

DrawerLayout結(jié)合Tollbar實(shí)現(xiàn)菜單側(cè)滑效果

android?Service基礎(chǔ)(啟動(dòng)服務(wù)與綁定服務(wù))

android教程viewpager自動(dòng)循環(huán)和手動(dòng)循環(huán)

Android之仿美團(tuán)加載數(shù)據(jù)幀動(dòng)畫