Xamarin 小案例,Web Api访问
就写了一个小案例Xamarin 访问api一个查询列表实时生成,也简单写了个ASP.net web api
先看效果吧
先打开那个该四visual的应用创建,是ASP.net web ,不是ASP.NET Core Web注意
创建好了运行是这个样子
现在导入你数据ADO数据模型
把你的数据库实例
现在ok,准备工作做完了
在你的项目Models文件夹下创建一个类
这个类一般是给你装数据模板,这个是简单示例
public class Asste
{
public int ID { get; set; }
public string AssteSN { get; set; }
public string AssteName { get; set; }
public string DepartmentLocation { get; set; }
public long EmployeeID { get; set; }
public long AssetGroupID { get; set; }
public string Description { get; set; }
public string WarrantyDate { get; set; }
}
要跟据你想要数据类型和数据格式来,当然你数据表就是好的,就不要,我这是方便自己,都可以实现
后面在你的项目Controller 文件夹下创建一个继承api的类
不是Controller,是ApiController,不然访问时一推莫名错误,访问不到
public class AssteCatalogueController : ApiController
{
// GET: AssteCatalogue
Asste[] asstes = new Asste[0];
public IEnumerable<Asste> Get()
{
//示例ADO数据模型
using (var context = new session1_gongsiEntities())
{
//这里是linq语句查询所有的集
var all = from a in context.Assets
select a;
foreach (var item in all)
{
var DeparmentLocation = context.Departments.FirstOrDefault
(a => a.ID == item.ID);
Asste asset = new Asste()
{
ID = (int)item.ID,
AssteSN = item.AssetSN,
AssteName = item.AssetName,
DepartmentLocation = DeparmentLocation.Name,
EmployeeID = (int)item.EmployeeID,
AssetGroupID = (int)item.AssetGroupID
};
if (asset != null)
{
//填充数据
List<Asste> ts = asstes.ToList();
ts.Add(asset);
asstes = ts.ToArray();
}
}
return asstes;
}
}
}
OK了,看看能不行,打开你的postman或者Apifox看看,顺便把你localhost换成你的IP地址试试,能不能访问,不能的参考(5条消息) VS webapi 把localhost访问改为ip访问_xjcwzp的博客-优快云博客我也是怎么解决的,有更好的办法,大佬请教教我
创建你Xamarin.from
运行后,大概就是一个初始化欢迎页面,MainPage.xaml代码如下,不懂可以去看看文档
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Session2.MainPage">
<StackLayout>
<StackLayout
BackgroundColor="#eee"
Padding="0"
Orientation="Horizontal"
Margin="10">
<Image Source="book.jpg"
VerticalOptions="Start"
HorizontalOptions="Start"
HeightRequest="30"
Margin="10"
/>
<Entry WidthRequest="285"
Placeholder="Search"
Margin="0,0,0,0"
x:Name="Search_Text"></Entry>
<ImageButton Source="search.jpg"
HeightRequest="30"
WidthRequest="30"
HorizontalOptions="End"
x:Name="Search_btn"
Clicked="Search_btn_Clicked"
/>
</StackLayout>
<StackLayout Margin="20">
<Label Text="Asste list:"
FontSize="14"
/>
</StackLayout>
</StackLayout>
<StackLayout>
<ListView x:Name="view" RowHeight="65" HasUnevenRows="true">
<ListView.ItemTemplate>
<DataTemplate>
<!--<TextCell Text="{Binding AssteName}"
Detail="{Binding DepartmentLocation}" ></TextCell>-->
<ViewCell>
<StackLayout BackgroundColor="#fff" Spacing="10" >
<StackLayout
HorizontalOptions="Start"
Orientation="Horizontal"
HeightRequest="80" >
<Image Source="aaa.jpg"
VerticalOptions="Start"
HorizontalOptions="Start"
HeightRequest="50"
Margin="10,15"
/>
<StackLayout Margin="0,10" WidthRequest="200">
<Label Text="{Binding AssteName}"
TextColor="#f35e20"
FontSize="10"
/>
<Label Text="{Binding DepartmentLocation}"
FontSize="12"
TextColor="#503026" />
<Label Text="{Binding WarrantyDate}"
FontSize="12"
TextColor="#503026"
/>
</StackLayout>
<StackLayout HorizontalOptions="End"
Margin="10,30" Orientation="Horizontal">
<Image Source="pen.jpg"
HeightRequest="25"
Margin="5,0"
/>
<Image Source="share.jpg"
HeightRequest="25"
Margin="5,0"
/>
<Image Source="menu.jpg"
HeightRequest="25"
/>
</StackLayout>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</StackLayout>
</ContentPage>
小图标是iconfont的
接下来是MianPage.xaml.cs的
Xamarin android 调用远程数据主要有两种方式:
List<Asste> list;
public MainPage()
{
InitializeComponent();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.1.6:44367/Api/Asste");
request.Method = "GET";
request.ContentType = "application/josn;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream,Encoding.GetEncoding("utf-8"));
string str = reader.ReadToEnd();
//JavaScriptSerializer js = new JavaScriptSerializer();
//这里是Josn反序列化,我知道的有两种方法,另一种就没写
list = JsonConvert.DeserializeObject<List<Asste>>(str);
//这里是填充view列表
view.ItemsSource = list;
//建议大家使用完,还是关闭,会占用大量的内存
reader.Close();
stream.Close();
response.Close();
}
//这是哪个类数据
public class Asste
{
public int ID { get; set; }
public string AssteSN { get; set; }
public string AssteName { get; set; }
public string DepartmentLocation { get; set; }
public int EmployeeID { get; set; }
public int AssetGroupID { get; set; }
public string Description { get; set; }
public string WarrantyDate { get; set; }
}
private void Search_btn_Clicked(object sender, EventArgs e)
{
//contains相似查询,这里是简单举例,大胆写出你想要的数据
var res_list = from a in list.ToList()
where a.AssteName.Contains(Search_Text.Text)
select a;
if (res_list != null)
{
view.ItemsSource = res_list;
}
else
{
DisplayAlert("Alert", "没地你查得,ok?", "OK");
}
}
}
这一段我不知道在复制的,就是api请求,想知道具体的,俺一时半会解释不清
最后,希望对各位帮助,我也是努力的小白白
Source = res_list;
}
else
{
DisplayAlert(“Alert”, “没地你查得,ok?”, “OK”);
}
}
}
这一段我不知道在复制的,就是api请求,想知道具体的,俺也解释不清
[外链图片转存中...(img-39EtMErH-1665563879373)]
最后,希望对各位帮助,我也是努力的小白白