国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android登錄的簡單處理

2019-12-12 03:15:40
字體:
供稿:網(wǎng)友

今天整理一下之前在項(xiàng)目中寫的關(guān)于某些界面需要登錄判斷處理。這里整理了一個(gè)簡易的 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í)沒想到其他好的方法,各位大神如果有什么好的處理方式還請多多指教。

這里還沒完呢,我們的登錄界面也是需要一定的處理邏輯去進(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("登錄成功");  } }

基本上要整理的就這么多。寫法上的一些不足,還請各位多多指點(diǎn)。

Demo 地址

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 墨玉县| 南岸区| 西乌珠穆沁旗| 社旗县| 普定县| 北辰区| 吉隆县| 东至县| 伊通| 遂昌县| 青铜峡市| 英德市| 乌拉特后旗| 高雄市| 拉萨市| 岐山县| 十堰市| 沁阳市| 石首市| 财经| 怀化市| 绥阳县| 磐石市| 师宗县| 赤城县| 罗山县| 罗定市| 尚志市| 佛山市| 连州市| 琼海市| 孟州市| 宁化县| 汉川市| 黔江区| 巨鹿县| 河源市| 阿克苏市| 嘉祥县| 西林县| 嘉祥县|