亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android應用中是如何對登錄進行處理的

發布時間:2020-11-30 17:51:55 來源:億速云 閱讀:126 作者:Leah 欄目:移動開發

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("登錄成功");
    }
  }

看完上述內容,你們掌握Android應用中是如何對登錄進行處理的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三门县| 临城县| 定兴县| 兰西县| 肥乡县| 玉门市| 孟津县| 建平县| 镇康县| 东乡县| 保亭| 齐齐哈尔市| 汉沽区| 洛阳市| 雷山县| 巩留县| 历史| 卢湾区| 嫩江县| 伊川县| 长葛市| 新野县| 天门市| 漳平市| 漠河县| 富裕县| 正定县| 南充市| 常山县| 定西市| 石台县| 黔西| 凤翔县| 潮州市| 乌兰察布市| 清河县| 泰和县| 深水埗区| 日照市| 平利县| 若羌县|