博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xamarin android 调用Web Api(ListView使用远程数据)
阅读量:6943 次
发布时间:2019-06-27

本文共 7010 字,大约阅读时间需要 23 分钟。

xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问。xamarin android调用远程数据主要有两种方式:

  1. 在Android中保存数据或调用数据库可以利用SQLite,android中提供了几个类来管理SQLite数据库,对数据进行增删改查
  2. 直接调用Asp.net Web API对数据进行增删改查

这两种方式到底选择哪一种方式好一点呢?哪一种方式好不好我不敢确定,市场上大部分app都是调用api来clud的。当然我也推荐大家使用web api来调用远程数据,至少目前来看我们公司都是使用web api来做的。好吧废话不多说,下面就是ListView来调用web api执行增删改查的例子。

先看一下效果图:

这个示例我还是拿之前的listview入门的例子做,,数据是直接调用远程的web api中的数据。主要实现步骤

  1. 新建一个web api的项目,写好要用到的方法。
  2. 在MainActivity.cs中发送请求并将相应的json字符串序列化成List集合

 web api中的 NewsControl.cs

using System.Collections.Generic;using System.Linq;using System.Net;using System.Web.Http;using WebApi10_9.Models;namespace WebApi10_9.Controllers{    public class NewsController : ApiController    {        List
list = new List
() { new News (1001,"加内特的历史地位能在NBA排第几,超越德国战车?",1200), new News (1002,"盘点新赛季最期待的十场比赛,无湖人比赛?",560), new News (1003,"库里新赛季铁定无缘常规赛MVP",158200), new News (1004,"我服,库里,杜兰特,汤普森谁才是出手的最佳选择",900), new News (1005,"易建联的出场时间你能猜出来吗,大概多少",960), new News (1006,"卡戴珊三姐妹睡多少男人",960), new News(1007,"科比退役后湖人到底失去多少中国的粉丝",4986), new News(1008,"科比退役湖人签中国篮球当家背后隐藏了多少阴谋",65987) }; public IEnumerable
GetAllNews() { return list; } [HttpGet] public List
Remove(int id) { var item = list.FirstOrDefault(p => p.Id == id); if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound); list.Remove(item); return list; } }}
MainActivity.cs

using Android.App;using Android.Content;using Android.Views;using Android.Widget;using Android.OS;using System.Collections.Generic;using DrawerLayout.Adapter;using Newtonsoft.Json;using System.Net;using System.Text;using System.IO;namespace DrawerLayout{    [Activity(Label = "ListViewDemo", MainLauncher = true, Icon = "@drawable/icon")]    public class MainActivity : Activity    {        int count = 1;        private List
data; private Context context; private NewsAdapter adapter; private ListView lv_test; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); //data = new List
() { // new News (1001,"加内特的历史地位能在NBA排第几,超越德国战车?",1200), // new News (1002,"盘点新赛季最期待的十场比赛,无湖人比赛?",560), // new News (1003,"库里新赛季铁定无缘常规赛MVP",158200), // new News (1004,"我服,库里,杜兰特,汤普森谁才是出手的最佳选择",900), // new News (1005,"易建联的出场时间你能猜出来吗,大概多少",960), // new News (1006,"卡戴珊三姐妹睡多少男人",960), // new News(1007,"科比退役后湖人到底失去多少中国的粉丝",4986), // new News(1008,"科比退役湖人签中国篮球当家背后隐藏了多少阴谋",65987) //}; string url = "http://192.168.1.172:100/api/news"; string content = AccessData.GetRouteData(url ); //接收到响应的json 字符串 List
list = JsonConvert.DeserializeObject
>(content); //已经获取到远程数据的List
和之前的本地data就是一样的了。 adapter = new NewsAdapter(list,this); lv_test = FindViewById
(Resource.Id.lv_test); View lv_header = LayoutInflater.Inflate(Resource.Layout.lv_header, null); lv_test.AddHeaderView(lv_header); lv_test.Adapter = adapter; } public class AccessData { public static string GetRouteData (string url) { //构建请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "text/json;chartset=UTF-8"; //request.UserAgent = ""; request.Method = "Get"; //接收响应 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(stream, Encoding.UTF8); string retString = streamReader.ReadToEnd(); return retString; } } }}
当然还有一个单击删除的事件还没有写,这个在NewsAdapter.cs里面写。

public override View GetView(int position, View convertView, ViewGroup parent)        {            convertView = LayoutInflater.From(context).Inflate(Resource.Layout.lv_test,parent,false);            ViewHolder holder = null;            if (convertView != null)            {                holder = new ViewHolder();                holder.btn = convertView.FindViewById
好了,这样就大功告成了。那么问题来了,上面发送http请求,然后又接收响应再序列化,这还仅仅是一个简单的例子,要是复杂实用一点的话,要写很多很多代码,这里我推荐一个非常好的第三方组件,http请求响应第三方组件RestSharp用的非常广泛。用法很简单,看完这篇大概你就懂了 。我为什么推荐大家使用这个第三方组件呢,因为本屌所在公司也是用这个的,好东西,就是要懂得分享,当然那种直接利用HttpWebRequest ,HttpWebResonse对象来获取文件流再序列化成List集合的原始方法肯定是要知道的。直接上代码,结果还是一样的。哦,先先Nuget下载RestSharp 才能引用。

protected override void OnCreate(Bundle bundle)        {            base.OnCreate(bundle);            SetContentView(Resource.Layout.Main);            string url = "http://192.168.1.172:100/api/news";            var client = new RestClient(url);//创建客户端请求            var request = new RestRequest();            //RestResponse response = (RestResponse)client.Execute(request);            //string responseStr = response.Content; 这两句获取json字符串,下面两句获取集合也很简洁            IRestResponse
> responseList = client.Get
>(request); List
list = responseList.Data;
//string content = AccessData.GetRouteData(url ); //接收到响应的json 字符串 //List
list = JsonConvert.DeserializeObject
>(content); //已经获取到远程数据的List
和之前的本地data就是一样的了。 adapter = new NewsAdapter(list,this); lv_test = FindViewById
(Resource.Id.lv_test); View lv_header = LayoutInflater.Inflate(Resource.Layout.lv_header, null); lv_test.AddHeaderView(lv_header); lv_test.Adapter = adapter; }
删除也是差不多的,所以不贴了,只需要这几句就可以了实现发送请求接收响应了。大力推荐使用RestSharp。代码下载址:

作者:张林

原文地址:

转载随意!

你可能感兴趣的文章
Ambari-Blueprint介绍
查看>>
可编辑ztree节点的增删改功能图标控制---已解决
查看>>
Android-自己定义标题栏
查看>>
redis中键空间通知
查看>>
JavaScript快速检测浏览器对CSS3特性的支持情况
查看>>
C#控制台程序输出彩色文字
查看>>
Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie
查看>>
Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法
查看>>
Yarn架构基本概况(一)
查看>>
使用反射实现 webdriver page 类
查看>>
关于各种无法解析的外部符号问题的相应解决方案【转】
查看>>
COGS 68. [NOIP2005] 采药【01背包复习】
查看>>
安装第三方库出现 Python version 2.7 required, which was not found in the registry
查看>>
Android 数据库框架总结(转)
查看>>
mysql中存储过程
查看>>
设备树中ranges属性分析(1)
查看>>
app测试初窥
查看>>
oc28--Property增强
查看>>
c++11 delete禁用函数
查看>>
多叉树的树形背包常见建模方法
查看>>