C# Xamarin从Web API获取数据
我正在尝试在Xamarin做一个简单的应用程序,在那里我可以看到我所在城市的当前天气。但我似乎做得不对。。我从openweathermap.org获得了api,我在url中搜索我所在城市的坐标。 为了获得OpenWeather类的类,我使用json2csharp生成了我的类 我想显示城市名称、天气描述和坐标 我将发布到目前为止获得的代码: MainPage.xaml.cs:C# Xamarin从Web API获取数据,c#,xamarin,C#,Xamarin,我正在尝试在Xamarin做一个简单的应用程序,在那里我可以看到我所在城市的当前天气。但我似乎做得不对。。我从openweathermap.org获得了api,我在url中搜索我所在城市的坐标。 为了获得OpenWeather类的类,我使用json2csharp生成了我的类 我想显示城市名称、天气描述和坐标 我将发布到目前为止获得的代码: MainPage.xaml.cs: public partial class MainPage : ContentPage { public Main
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
GetWeather();
}
public async void GetWeather()
{
try
{
string URL = "http://api.openweathermap.org/data/2.5/weather?lat=58.34&lon=11.94&appid=((((((MY API KEY))))))))))))";
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync(new Uri(URL));
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var weatherList = JsonConvert.DeserializeObject<RootObject>(content);
//Databind the list
lstWeather.ItemsSource = weatherList;
}
}
catch (Exception ex)
{
//ToDo Give errormessage to user and possibly log error
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
}
}
MainPage.xaml:
<ProgressBar IsEnabled="True"></ProgressBar>
<ListView x:Name="lstWeather">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<StackLayout Orientation="Vertical">-->
<Label Text="{Binding name}" />
<Label Text="{Binding desciption}" Margin="20,0,0,0"/>
<Label Text="{Binding lon}" Margin="20,0,0,0"/>
<Label Text="{Binding lat}" Margin="20,0,0,0"/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
namespace TestApp
{
公共类合作社
{
公共双lon{get;set;}
公共双lat{get;set;}
}
问题在于:
lstWeather.ItemsSource = weatherList;
weatherList是一个RootObject,但ListView的数据源需要IEnumerable
您可能想这样做:
lstWeather.ItemsSource = weatherList.weather;
我认为这一行需要如下:
var weatherList = JsonConvert.DeserializeObject<List<RootObject>>(content);
无法正确地描述您的问题似乎没有帮助。您具体遇到了什么问题?您遇到了错误还是异常?@Jason噢,对不起!我目前的异常情况出现在MainPage.xaml.cs文件中,错误消息是:无法隐式将类型“TestApp.RootObject”转换为“System.Collections.IEnumerable”。存在显式转换。是否缺少强制转换?我甚至不确定当问题解决后,我的语法是否正确以打印出我想要的内容。这帮助我消除了错误。现在我可以启动应用程序,但它是空的。如果我将鼠标悬停,我可以看到那里有一个listitem。当我在lstWeather.ItemsSource=weat设置断点时herList.weather;我可以看到我想看到的对象。也许我在xaml中的数据绑定是错误的?列表中的每一项都是weather对象,因此您的绑定必须是WeatherWell的属性。不过,我在输出窗口中得到了这一点。那么,数据绑定将如何呢?weather类没有名称属性,但我认为使用这个var weatherList=JsonConvert.DeserializeObjectcontent;我创建了一个包含name?
var weatherList = JsonConvert.DeserializeObject<RootObject>(content);
var weatherList = JsonConvert.DeserializeObject<List<RootObject>>(content);