从Xamarin Android调用Web API没有返回结果

本文关键字:返回 结果 API Web Xamarin Android 调用 | 更新日期: 2023-09-27 18:13:16

嗨,我已经创建了一个解决方案,其中有3个项目。我的解决方案有一个Windows控制台应用程序,一个Xamarin Android项目和一个可移植类库(PCL)。我在控制台和Android应用程序中都引用了我的PCL。我的PCL有我的模型和ViewModels,我正在从ViewModels调用Web API。下面是一个示例viewModel

 public class RoutineViewModel
  {
     public async Task<IEnumerable<Routine>> GetRoutines()
      {
       //Lets Get List from Routines Web API
        try
        {
            var client = new HttpClient();
            var json = await client.GetStringAsync(BroadCastApiUrls.Routines);
            var results = JsonConvert.DeserializeObject<IEnumerable<Routine>>(json);
            if (results.Any())
                return results;
            return null;
        }
        catch (Exception ex)
        {
            //Some logging code here
            return null;
        }
    }
}

我是通过这个RoutineViewModel的实例在一个方法调用从一个按钮点击处理程序,这是调用GetRoutines方法的代码

//In the Activity class 
  readonly RoutineViewModel routineViewModel = new RoutineViewModel();     
   private async Task<bool> LoadRoutines()
     {
         try
         {
            var routines = await routineViewModel.GetRoutines();
            if (routines != null)
            {
                routinesList = routines.ToList();
                listView.Adapter = new RoutinesListAdapter(this, routinesList);
            }
            else
            {
                var builder = new AlertDialog.Builder(this);
                var alert = builder.Create();
                alert.SetTitle("No Results!");
                // alert.SetIcon(Resource.Drawable)
                alert.SetMessage("No Routines From API!");
                alert.DismissEvent += alert_DismissEvent;
                alert.Show();
                return true;
            }
        }
        catch (Exception ex)
        {
            //Some logging and clean up code
        }
        return false;
    }

这个调用从我的控制台应用程序返回预期的结果,但在我的android模拟器上相同的方法调用没有返回结果。我错过了什么?我快疯了。

编辑

从loadRoutines的点击处理程序调用是

 bool isLoaded = await LoadRoutines();

从Xamarin Android调用Web API没有返回结果

你可能会调用Task<T>.ResultTask.Wait,这将在控制台应用程序中工作,但在GUI上下文中失败。我在我的博客上更详细地解释了这种行为。

最好的解决方案是用await代替ResultWait。请注意,这意味着您必须决定在例程加载时UI的外观,然后在加载完成时使用结果更新