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

首頁 > 系統 > Android > 正文

Android 登錄處理簡單實例(源碼下載)

2019-12-12 03:15:34
字體:
來源:轉載
供稿:網友

Android 登錄處理簡單實例

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

效果如圖:

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

先從核心代碼開始看:

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 地址

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐都县| 仁寿县| 张家港市| 长沙县| 乌审旗| 南丰县| 介休市| 达日县| 甘洛县| 忻城县| 西乌珠穆沁旗| 高台县| 堆龙德庆县| 阜南县| 平邑县| 东山县| 宣汉县| 大渡口区| 曲麻莱县| 新建县| 淮阳县| 前郭尔| 罗田县| 牙克石市| 伊宁市| 哈尔滨市| 兴和县| 天全县| 黑龙江省| 体育| 黄平县| 抚松县| 富宁县| 东平县| 德阳市| 紫金县| 桦川县| 西昌市| 泰和县| 安新县| 浦城县|