首先,我不确定我在设计方面是否是最好的方式,但我对 Android 有点陌生,对 Xamarin.Forms 也很陌生。我的设置是一系列 ContentPageXamarin.Forms PCL 中的所有组件都处理来自 REST 服务的信息。该服务在登录后授予 WorkToken 然后应用程序保留该信息以便执行进一步的操作。我将其存储在 ISessionManager.

我的问题是工作流程问题。我有一个 LoginPage 我想向用户展示他们的会话是否已结束/出现故障/无论什么情况;基本上,如果他们没有登录并尝试执行任何操作,我想将此页面推送到堆栈上并强制他们尝试登录,如果他们提供有效的凭据,则让他们从上次中断的地方继续。所有这一切大部分都在 PCL 中进行,但我已经创建了一个 Android 实现 ISessionManager 这是对每个查询 ContentPage被覆盖 OnAppearing 方法。每个页面都会调用 ISessionManagerCheckLogin 这将做到这一点,如果他们没有登录,它将创建一个 Intent 并启动 LoginActivity 通过那。 LoginActivity 本质上只是围绕着 PCL LoginPage.

我遇到的问题是,这样做, LoginActivity 在调用它的任何页面之上异步运行。然而,该调用页面处于损坏状态,因为它尚未通过 REST 服务正确初始化。我想有两种可能的解决方案。要么运行 Intent 同步(我认为这是不可能的)或重新考虑我的设计。这是 Intent 设置:

var intent = new Intent(_context, typeof(LoginActivity));
intent.AddFlags(ActivityFlags.NewTask);
_context.StartActivity(intent);

我已经检查了几个 Xamarin 论坛以获取与此相关的帖子,但除了 Xamarin.Forms 中的基本导航工作流程之外,没有发现更多内容。

编辑:我发现了一些与我在这里尝试做的类似的事情: 如何将变量从新意图传递回在 android 中创建它的类, ,但在 Xamarin.Forms 的上下文中。这 startActivityForResult 如果我的问题存在于 Forms.Context, ,但似乎没有等效的。

有帮助吗?

解决方案

为什么要创建 LoginActivity?是因为你需要使用 android 原生的东西吗?

我的第一个想法是,在检查 OnAppearing 上的令牌状态后,您可以决定是否推送登录页面的模式,在用户登录完成并保存令牌后,您可以弹出模式并它将显示用户之前所在的页面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top