欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 登录处理简单实例(源码下载)

程序员文章站 2022-06-30 08:33:00
android 登录处理简单实例 今天整理一下之前在项目中写的关于某些界面需要登录判断处理。这里整理了一个简易的 demo 模拟一下 登录情况 和 未登录情况 下的界面跳...

android 登录处理简单实例

今天整理一下之前在项目中写的关于某些界面需要登录判断处理。这里整理了一个简易的 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 地址

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!