ARouter 与 IProvider服务调用,IInterceptor登陆拦截

2023-12-23 03:58

本文主要是介绍ARouter 与 IProvider服务调用,IInterceptor登陆拦截,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:

xingfu0809 / ArouterLogin : 基于Arouter的登录拦截

IProvider

base模块 : 定义服务接口
import com.alibaba.android.arouter.facade.template.IProvider;public interface IModuleService extends IProvider {/*** 获取用户名** @return 用户名*/String getUserName();}
user模块 : 实现服务接口
import android.content.Context;import com.alibaba.android.arouter.facade.annotation.Route;@Route(path = "/user/user_service")
public class UserServiceImpl implements IModuleService {@Overridepublic String getUserName() {return "xq";}@Overridepublic void init(Context context) {}
}
video模块 : 调用服务
//通过path调用服务
String userName1 = ((IModuleService) ARouter.getInstance().build("/user/user_service").navigation()).getUserName();//通过类名调用服务
String userName2 = ARouter.getInstance().navigation(IModuleService.class).getUserName();

我们还可以在base中处理,然后在调用:

base模块:

import com.alibaba.android.arouter.launcher.ARouter;public class ModuleServiceFinder {public static String getUserName() {IModuleService iModuleService = ARouter.getInstance().navigation(IModuleService.class);if (iModuleService != null) {return iModuleService.getUserName();}return "";}}

video模块 :调用服务


//通过base调用服务
String userName3 = ModuleServiceFinder.getUserName();

IInterceptor

定义拦截器
import android.content.Context;import com.alibaba.android.arouter.facade.Postcard;
import com.alibaba.android.arouter.facade.callback.InterceptorCallback;
import com.alibaba.android.arouter.facade.template.IInterceptor;public class LoginInterceptorImpl implements IInterceptor {@Overridepublic void process(Postcard postcard, InterceptorCallback callback) {boolean login = UserCenter.isLogin();if (login) {//已登陆不拦截callback.onContinue(postcard);} else {String path = postcard.getPath();switch (path) {//不需要登陆直接进入界面case "/video/main":case "/picture/main":callback.onContinue(postcard);break;default://需要登陆拦截callback.onInterrupt(null);break;}}}@Overridepublic void init(Context context) {}
}
ReadActivity : 需要登陆的界面

ARouter.getInstance().build("/read/main").withString("msg","我是传递到read activity的数据").navigation(this, new NavigationCallback() {//找到了@Overridepublic void onFound(Postcard postcard) {}//找不到了@Overridepublic void onLost(Postcard postcard) {}//跳转成功了@Overridepublic void onArrival(Postcard postcard) {}//被拦截了@Overridepublic void onInterrupt(Postcard postcard) {//跳转到登陆,//把参数和path都传递到登陆页,登陆完成后再跳转String path = postcard.getPath();Bundle extras = postcard.getExtras();ARouter.getInstance().build("/login/main").with(extras).withString("path", path).navigation();}});
LoginActivity : 登陆界面
@Autowired
public String path = "";//登陆后
if (!TextUtils.isEmpty(path)) {ARouter.getInstance()//传递过来的路径.build(path)//传递过来的参数.with(getIntent().getExtras()).navigation();
}
finish();

这篇关于ARouter 与 IProvider服务调用,IInterceptor登陆拦截的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526629

相关文章

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Golang服务平滑重启

与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务。 我们先来看下Github上有没有相应的库解决这个问题,然后找到了如下三个库: facebookgo/grace - Graceful restart & zero downtime deploy for G

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods