我正在Visual中用Xamarin Android开发一个Android应用程序。
我有一个MainActivity,它将不会超过2个按钮登录或注册。一旦其中一个按钮被点击,就会启动如下新的活动:
sign_in_button.Click += delegate
{
var login_activity = new Intent(this, typeof(Login));
StartActivity(login_activity);
};
在这个活动中,我做了所有我需要用API登录的事情,一切正常,成功后我保存令牌并调用Finish();返回到MainActivity。
if(response_text != "\"wrong\"")
{
General.SaveToken(this, response_text);
Finish();
}
现在,问题是我需要以某种方式告诉MainActivity,用户成功登录了。为此,我考虑检查SharedPreferences中是否保存了令牌,如果存在,则启动所需的活动。这样,当应用程序打开时,如果已经保存了令牌,那么它也应该可以工作,然后转到x活动。
我的问题是,所有的活动事件(onPause、onRestart、onResume等)从未被称为.在MainActivity中,我添加了一个测试,以验证它是否像这样被调用:
protected override void OnPause()
{
base.OnPause();
Console.WriteLine("TEEEEEEEEST");
//set alert for executing the task
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.SetTitle("Activity event");
alert.SetMessage("The activity is paused");
alert.SetPositiveButton("Ok", (senderAlert, args) =>
{
});
Dialog dialog = alert.Create();
dialog.Show();
}
但是没有出现对话框,控制台中没有显示TEEEEEEEEST。我也试图添加断点,但它们没有被击中。
当然,我尝试了所有其他的事件,都有相同的结果:没有。
据我从活动生命周期文档中了解到,onPause在调用StartActivity时会自动调用,在“子”活动调用Finish()之后会自动调用onResume,或者当按下back按钮时会自动调用onResume。
我错过了什么/做错了什么?
我读到这可能是Visual的一个问题,所以我在提供的android模拟器上和在一个真正的设备(LGE Nexus 5运行Android6.0.1)上进行了尝试,结果相同。
请帮帮我!
谢谢大家提前!
发布于 2018-03-14 03:41:19
显然问题是Visual,我重新安装了它,所有的活动事件都被正确地调用了。
谢谢大家的支持
发布于 2018-03-09 03:46:49
首先,确保您没有手动创建任何活动实例,这可能是某个活动的实例没有接收生命周期回调的原因之一。
但是,如果您的主要活动出现/单击上面的按钮,则会调用它们,但是您的环境/IDE可能有问题。
解决原始问题的一个很好的解决方案是使用startActivityForResult()
。
因此,可以启动登录活动以获取结果,如果登录成功,则返回RESULT_OK
;如果没有成功,则返回RESULT_CANCELLED
。
在MainActivity中,您可以通过重写onActivityResult
来检查结果
编辑:
好吧,让我们来调试一下你的尝试
Console
并不真正在Android上工作,请使用Android的日志类代替。发布于 2019-07-11 08:29:39
我也遇到了同样的问题,通过删除bin
和obj
文件夹解决了这个问题,然后我重新构建了这个项目,它成功了。我正在使用VisualStudioCommunity2019
https://stackoverflow.com/questions/49192276
复制