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

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

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

(0)

相关推荐

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

    Android 登录处理简单实例 今天整理一下之前在项目中写的关于某些界面需要登录判断处理.这里整理了一个简易的 Demo 模拟一下 登录情况 和 未登录情况 下的界面跳转处理, 效果如图: 以上分别模拟了,未登录和已登录 情况下的 界面跳转和当前界面事件处理.接下来我们来看一下实现方式. 先从核心代码开始看: public class GoLoginUtil { public static final String CLASSNAME = "className"; public st

  • Android管理与操作Wifi简单实例源码

    因为需要一直在弄网络的问题,今天看了一下Wifi的操作,经过整理,做出来了一个类,可能不全,但是个人感觉已经完全能够满足需要了,当然,里面的方法也有可能是错误的或者是不全的,这个类我没有进行完整的测试,只测试了其中的一些方法. 其实操作Wifi也是很简单的,主要使用以下几个对象或变量: private WifiManager wifiManager;// 声明管理对象OpenWifi private WifiInfo wifiInfo;// Wifi信息 private List<ScanRes

  • Android实现中国象棋附源码下载

    象棋,很多人多接触过,学者写了一个,大神可以指点一下~直接上代码: 贴出主要代码,想要Demo的点击下载:中国象棋Demo package wyf.ytl; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; impor

  • Android自定义UI手势密码改进版源码下载

    在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 源码下载:http://xiazai.jb51.net/201610/yuanma/androidLock(jb51.net).rar 先看第一张图片的布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

  • MyEclipse整合ssh三大框架环境搭载用户注册源码下载

    前言 SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层(实体层). Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持.Spring一方面作为一个轻量级的IoC容器,负责查找.定位.创建和管理对象及

  • Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】

    本文实例讲述了Android开发实现高仿优酷的客户端图片左右滑动切换功能.分享给大家供大家参考,具体如下: 本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能使用ViewPager控件. 2. 图片的自动切换: 可使用Timer或者ScheduledExecutorService,这个有多重方式可以实现. 同时要切换底部的dots(园点) 3.Ha

  • 简单实现Android学生管理系统(附源码)

    本文实例讲述了Android实现学生管理系统,分享给大家供大家参考.具体如下: (1)管理系统实现的功能主要是:学生.教师的注册登录,和选课,以及修改学生的成绩等基本简单的功能,最主要的是实现一些Dialog的使用. 界面如下: (2)主要代码如下:(个人留作笔记,如需要完整代码,在最下边免费下载) 下边是一个适配器,适配器是为了一个listvie进行设置值,其中加载的是一个itemview,适配器中还是用了继承的方法,用于通知适配器进行更新. public class CourseAdapte

  • Android编程实现画板功能的方法总结【附源码下载】

    本文实例讲述了Android编程实现画板功能的方法.分享给大家供大家参考,具体如下: Android实现画板主要有2种方式,一种是用自定义View实现,另一种是通过Canvas类实现.当然自定义View内部也是用的Canvas.第一种方式的思路是,创建一个自定义View(推荐SurfaceView),在自定义View里通过Path对象记录手指滑动的路径调用lineTo()绘制:第二种方式的思路是,先用Canvas绘制一张空的Bitmap,通过ImageView的setImageBitmap()方

  • jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)

    弹出层用来向用户展示详细的信息,交互性非常强.弹出层有对话框.模态窗口等形式,这里我都把他们叫做弹出层,我的同事们也是这么叫的.一般我们喜欢使用比较成熟的弹出层插件如fancybox等,但在本文,我将先抛弃插件,给大家介绍如何使用jQuery+CSS3+Html5实现弹出层. 效果展示       源码下载 我们完全使用HTML5+CSS3+jQuery来实现一个基本的弹出层效果,因此我们可以在示例中任意修改弹出层外观样式.甚至js方法调用.我们最终做出来的弹出层效果应该是响应式的,也就是说可以

  • Android实现画板、写字板功能(附源码下载)

    前言 本文给大家分享一个使用Android开发写字板功能Dem.简单操作内存中的图像.对图像进行简单的处理.绘制直线.以达到写字板的效果 效果图如下 XML布局代码 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="

随机推荐