无法从异步函数启动新的Intent活动

时间:2014-06-17 18:38:24

标签: c# android android-intent xamarin async-await

我在android的xamarin应用程序中遇到了问题。 从我的主要活动我调用登录活动来检查用户和passwordentered是否正确,它是通过Microsoft.WindowsAzure.MobileServices插件完成的。 我得到了答案,但是当我尝试在异步函数中打开一个新活动时,得到结果,应用程序挂起。 我尝试从异步方法外部访问该目标活动,它的工作原理。我的代码:

private async Task<int> GetAdminUser(string userName,string password)
        {
            int userId = -1;

            try
            {
                users = await usersTable.Where (item => item.UserLoginName == userName && item.UserPassword == password).ToListAsync ();

                if(users != null)
                {
                    userId = users[0].UserId;
                }
                else{
                    userId = -1;
                }
            }
            catch(Exception ex) {
                userId = -1;
            }

            return userId;

        }

        private async Task GetAdminUserWrapper(string userName,string password)
        {
            int userId = await GetAdminUser (userName, password);
            if (userId != -1) 
            {
                //new AlertDialog.Builder (this).SetMessage ("User id : " + userId.ToString ()).Create().Show();
                await OpenUserBusinessSalesIntent (userId);
            }
        }

        async Task OpenUserBusinessSalesIntent (int userId)
        {
            try {
                Intent testActivity = new Intent (this, typeof(TestActivity));
                //userSalesActivity.AddFlags (ActivityFlags.NewTask);

                //userSalesActivity.PutExtra ("UserIdBusiness",userId.ToString ());
                //SetResult (Result.Ok,testActivity);
                StartActivity (testActivity);
            } 
            catch (Exception ex) 
            {

            }
        } 

任何帮助都会得到满足 Shlomy

2 个答案:

答案 0 :(得分:1)

在UI线程上启动活动:

runOnUiThread(() => {
  Intent testActivity = new Intent (this, typeof(TestActivity));

  StartActivity (testActivity);
});

答案 1 :(得分:0)

感谢您的想法,崩溃是在我尝试在异步功能中启动新意图时 在我收到userId之后。 解决方案是使用RunOnUiThread并使用try catch和runOnUiThread包装它 开始意图。 10倍 Shlomy