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

首頁 > 系統 > Android > 正文

Android登錄的簡單處理

2019-10-23 18:33:26
字體:
來源:轉載
供稿:網友

今天整理一下之前在項目中寫的關于某些界面需要登錄判斷處理。這里整理了一個簡易的 Demo 模擬一下 登錄情況 和 未登錄情況 下的界面跳轉處理, 效果如圖:

Android,登錄

以上分別模擬了,未登錄和已登錄 情況下的 界面跳轉和當前界面事件處理。接下來我們來看一下實現方式。
先從核心代碼開始看:

 

public class GoLoginUtil { public static final String CLASSNAME = "className"; public static final int CODE_LOGIN = 1; // 登錄成功回調 用于onActivityForResult 判斷 /**  * 登錄成功之后,通過 activityResult 回調到當前界面  *  * @param activity  * @param intent  * @param requestCode  */ private static void startActivity(Activity activity, Intent intent, int requestCode) {  if (requestCode == -1) {   String targetClass = intent.getComponent().getClassName(); // 目標類   intent.putExtra(CLASSNAME, targetClass);  }  intent.setClass(activity, LoginActivity.class); // 跳轉重定向到登錄界面  activity.startActivityForResult(intent, requestCode); } /**  * 登錄成功之后,直接跳轉目標 Activity  *  * @param activity  * @param intent  */ public static void startActivity(Activity activity, Intent intent) {  startActivity(activity, intent, -1); } /**  * 登錄成功回調到當前界面  * 使用 onActivityResult 方法接收, requestCode = CODE_LOGIN  *  * @param activity  * @param intent  */ public static void startActivityForResult(Activity activity, Intent intent) {  startActivity(activity, intent, CODE_LOGIN); }}

這里可以看到,最主要的就是第一個 private 修飾的 startActivity 方法,看過 Android Activity 的 startActivity 方法源碼的應該知道,它里面其實就是調用的 startActivityForResult(intent , -1) . 所以我們這里也來用一下它的寫法。如果 等于 -1 ,那么就說明是有跳轉目標 Activity 的,那么我們就通過 Intent.getComponent().getClassName() 來獲取目標 Activity 的類名,再次添加到 Intent參數中,用于我們登錄成功之后的后續跳轉目標。當然,intent 中的其他參數是會一直攜帶著的,這里不用擔心其他參數。 不等于 -1 那么就是要進行 setResult 回調了。所以,我們是通過 requestCode 是否等于 -1 來區分是繼續跳轉,還是回調當前界面。 工具類中的下面兩個方法,就把功能區分開了,這里基本上看著系統源碼來的。

然后再來進行一下二次封裝,這里就需要判斷當前 登錄狀態了,這里我也是模擬一下登錄狀態,代碼如下:

 

public class IntentUtil { public static boolean isLogin; // 模擬獲取當前用戶登錄狀態。 /**  * 需要登錄判斷  *  * @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);  } } /**  * 登錄成功會有回調  * 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); }}

寫到現在這樣,基本上需要進行登錄跳轉界面的,可以直接調用 startToLogin 方法,根據登錄狀態進行跳轉。至于 startToLoginResult 方法,目前還需要在調用時進行判斷一下登錄狀態,進行區分處理,然后還要在 onActivityForResult 方法中進行回調處理,這個暫時沒想到其他好的方法,各位大神如果有什么好的處理方式還請多多指教。

這里還沒完呢,我們的登錄界面也是需要一定的處理邏輯去進行配合的。我們來看一下怎么去配合:

 

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); // 目標跳轉類 } public void onLoginClick(View view) {  // 模擬登錄成功操作  if (!TextUtils.isEmpty(targetClass)) {   // 這里就是執行繼續跳轉操作   try {    Class clazz = Class.forName(targetClass);    getIntent().setClass(this, clazz);    startActivity(getIntent());    finish();   } catch (ClassNotFoundException e) {    e.printStackTrace();   }  } else {   // 這里是登錄成功,回調到之前界面 onActivityForResult()中 方法可根據自己需求處理。。   setResult(RESULT_OK);   finish();  } }}

最后來看一下我們的調用方式:

/**  * 登錄跳轉  *  * @param view  */ public void onClick1(View view) {  Bundle bundle = new Bundle();  bundle.putString("content", et_content.getText().toString());  IntentUtil.startToLogin(this, LoginSuccessActivity.class, bundle); } /**  * 登錄回調  *  * @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("登錄成功");  } }

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

Demo 地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 响水县| 临邑县| 屏南县| 白银市| 尼勒克县| 突泉县| 武夷山市| 门头沟区| 枣强县| 句容市| 昌乐县| 车险| 岑溪市| 宁阳县| 榆林市| 靖江市| 通城县| 卓资县| 渑池县| 巴马| 进贤县| 石首市| 达日县| 金湖县| 湘潭市| 习水县| 精河县| 特克斯县| 布尔津县| 乌拉特中旗| 津南区| 榆林市| 贵溪市| 玉山县| 肇东市| 麻江县| 翁牛特旗| 长葛市| 三原县| 平湖市| 黑水县|