Xamarin 小案例,Web Api访问

Xamarin 小案例,Web Api访问

就写了一个小案例Xamarin 访问api一个查询列表实时生成,也简单写了个ASP.net web api
先看效果吧
在这里插入图片描述

先打开那个该四visual的应用创建,是ASP.net web ,不是ASP.NET Core Web注意

在这里插入图片描述

创建好了运行是这个样子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bor6bmY-1665563879369)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665559621488.png)]

现在导入你数据ADO数据模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rkbQEjGK-1665563879370)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665559729640.png)]

把你的数据库实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w74dGc4D-1665563879371)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665559786245.png)]

现在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的类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-svEePjmN-1665563879371)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665559905599.png)]

不是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的博客-优快云博客我也是怎么解决的,有更好的办法,大佬请教教我

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9b2THDY-1665563879372)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665562325809.png)]

创建你Xamarin.from

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOtvWMr2-1665563879373)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665561476454.png)]

运行后,大概就是一个初始化欢迎页面,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 调用远程数据主要有两种方式:

  1. 在Android中保存数据或调用数据库可以利用SQLite,android中提供了几个类来管理SQLite数据库,对数据进行增删改查
  2. 直接调用Asp.net Web API对数据进行增删改查
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请求,想知道具体的,俺一时半会解释不清

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39EtMErH-1665563879373)(C:\Users\95925\AppData\Roaming\Typora\typora-user-images\1665563039724.png)]

最后,希望对各位帮助,我也是努力的小白白

Source = res_list;
}
else
{
DisplayAlert(“Alert”, “没地你查得,ok?”, “OK”);
}

    }
}
这一段我不知道在复制的,就是api请求,想知道具体的,俺也解释不清

[外链图片转存中...(img-39EtMErH-1665563879373)]

最后,希望对各位帮助,我也是努力的小白白













评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值