Xamarin android 调用Web Api(ListView使用远程数据)

本文介绍 Xamarin Android 应用如何通过 ListView 调用 WebAPI 获取远程数据并展示,包括数据序列化、HTTP 请求处理及使用 RestSharp 组件简化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xamarin android 调用Web Api(ListView使用远程数据)

置顶 2016年10月10日 16:29:32 张林blog 阅读数:6660 标签: listviewXamarin AndroidXamairn android使用动态数Xamarin android Listxamarin 更多

个人分类: Xamarin android

所属专栏: xamarin android入门详解

版权声明:本文为博主原创文章,未经博主允许转载随意。 https://blog.youkuaiyun.com/kebi007/article/details/52770808

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入门的例子做, xamarin android listview的用法,数据是直接调用远程的web api中的数据。主要实现步骤

 

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

 

 web api中的 NewsControl.cs

 

 
  1. using System.Collections.Generic;

  2. using System.Linq;

  3. using System.Net;

  4. using System.Web.Http;

  5. using WebApi10_9.Models;

  6. namespace WebApi10_9.Controllers

  7. {

  8. public class NewsController : ApiController

  9. {

  10. List<News> list = new List<News>() {

  11. new News (1001,"加内特的历史地位能在NBA排第几,超越德国战车?",1200),

  12. new News (1002,"盘点新赛季最期待的十场比赛,无湖人比赛?",560),

  13. new News (1003,"库里新赛季铁定无缘常规赛MVP",158200),

  14. new News (1004,"我服,库里,杜兰特,汤普森谁才是出手的最佳选择",900),

  15. new News (1005,"易建联的出场时间你能猜出来吗,大概多少",960),

  16. new News (1006,"卡戴珊三姐妹睡多少男人",960),

  17. new News(1007,"科比退役后湖人到底失去多少中国的粉丝",4986),

  18. new News(1008,"科比退役湖人签中国篮球当家背后隐藏了多少阴谋",65987)

  19. };

  20. public IEnumerable<News> GetAllNews()

  21. {

  22. return list;

  23. }

  24. [HttpGet]

  25. public List<News> Remove(int id)

  26. {

  27. var item = list.FirstOrDefault(p => p.Id == id);

  28. if (item == null)

  29. throw new HttpResponseException(HttpStatusCode.NotFound);

  30. list.Remove(item);

  31. return list;

  32. }

  33. }

  34. }


MainActivity.cs

 

 

 
  1. using Android.App;

  2. using Android.Content;

  3. using Android.Views;

  4. using Android.Widget;

  5. using Android.OS;

  6. using System.Collections.Generic;

  7. using DrawerLayout.Adapter;

  8. using Newtonsoft.Json;

  9. using System.Net;

  10. using System.Text;

  11. using System.IO;

  12. namespace DrawerLayout

  13. {

  14. [Activity(Label = "ListViewDemo", MainLauncher = true, Icon = "@drawable/icon")]

  15. public class MainActivity : Activity

  16. {

  17. int count = 1;

  18. private List<News> data;

  19. private Context context;

  20. private NewsAdapter adapter;

  21. private ListView lv_test;

  22. protected override void OnCreate(Bundle bundle)

  23. {

  24. base.OnCreate(bundle);

  25. SetContentView(Resource.Layout.Main);

  26. //data = new List<News>() {

  27. // new News (1001,"加内特的历史地位能在NBA排第几,超越德国战车?",1200),

  28. // new News (1002,"盘点新赛季最期待的十场比赛,无湖人比赛?",560),

  29. // new News (1003,"库里新赛季铁定无缘常规赛MVP",158200),

  30. // new News (1004,"我服,库里,杜兰特,汤普森谁才是出手的最佳选择",900),

  31. // new News (1005,"易建联的出场时间你能猜出来吗,大概多少",960),

  32. // new News (1006,"卡戴珊三姐妹睡多少男人",960),

  33. // new News(1007,"科比退役后湖人到底失去多少中国的粉丝",4986),

  34. // new News(1008,"科比退役湖人签中国篮球当家背后隐藏了多少阴谋",65987)

  35. //};

  36. string url = "http://192.168.1.172:100/api/news";

  37. string content = AccessData.GetRouteData(url ); //接收到响应的json 字符串

  38. List<News> list = JsonConvert.DeserializeObject<List<News>>(content); //已经获取到远程数据的List<News>和之前的本地data就是一样的了。

  39. adapter = new NewsAdapter(list,this);

  40. lv_test = FindViewById<ListView>(Resource.Id.lv_test);

  41. View lv_header = LayoutInflater.Inflate(Resource.Layout.lv_header, null);

  42. lv_test.AddHeaderView(lv_header);

  43. lv_test.Adapter = adapter;

  44. }

  45. public class AccessData

  46. {

  47. public static string GetRouteData (string url)

  48. {

  49. //构建请求

  50. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

  51. request.ContentType = "text/json;chartset=UTF-8";

  52. //request.UserAgent = "";

  53. request.Method = "Get";

  54. //接收响应

  55. HttpWebResponse response = (HttpWebResponse)request.GetResponse();

  56. Stream stream = response.GetResponseStream();

  57. StreamReader streamReader = new StreamReader(stream, Encoding.UTF8);

  58. string retString = streamReader.ReadToEnd();

  59. return retString;

  60. }

  61. }

  62. }

  63. }

当然还有一个单击删除的事件还没有写,这个在NewsAdapter.cs里面写。

 

 

 
  1. public override View GetView(int position, View convertView, ViewGroup parent)

  2. {

  3. convertView = LayoutInflater.From(context).Inflate(Resource.Layout.lv_test,parent,false);

  4. ViewHolder holder = null;

  5. if (convertView != null)

  6. {

  7. holder = new ViewHolder();

  8. holder.btn = convertView.FindViewById<Button>(Resource.Id.btn_delete);

  9. holder.title = convertView.FindViewById<TextView>(Resource.Id.tv_title);

  10. holder.pv = convertView.FindViewById<TextView>(Resource.Id.tv_pv);

  11. }

  12. else

  13. {

  14. convertView.Tag = holder;

  15. }

  16. holder.pv.Text = data[position].Pv.ToString();

  17. holder.title.Text = data[position].Title;

  18. holder.btn.Click += (s, e) => DeleteClick(data[position].Id,position);

  19. return convertView;

  20. }

  21. public void DeleteClick(int id,int position)

  22. {

  23. string url = "http://192.168.1.172:100/api/news/"+id;

  24. string content = AccessData.GetRouteData(url); //已经接收到响应的json 字符串

  25. Toast.MakeText(context,data[position].Title+"删除成功",ToastLength.Short).Show();

  26. List<News> list = JsonConvert.DeserializeObject<List<News>>(content);

  27. data = list;

  28. NotifyDataSetChanged();

  29. }

  30. }

  31. public class ViewHolder:Java.Lang.Object

  32. {

  33. public TextView title;

  34. public TextView pv;

  35. public Button btn;

  36. }


好了,这样就大功告成了。那么问题来了,上面发送http请求,然后又接收响应再序列化,这还仅仅是一个简单的例子,要是复杂实用一点的话,要写很多很多代码,这里我推荐一个非常好的第三方组件,http请求响应第三方组件RestSharp用的非常广泛。用法很简单,看完这篇大概你就懂了RestSharp的10分钟入门实例。我为什么推荐大家使用这个第三方组件呢,因为本屌所在公司也是用这个的,好东西,就是要懂得分享,当然那种直接利用HttpWebRequest ,HttpWebResonse对象来获取文件流再序列化成List集合的原始方法肯定是要知道的。直接上代码,结果还是一样的。哦,先先Nuget下载RestSharp 才能引用。

 

 

 

 
  1. protected override void OnCreate(Bundle bundle)

  2. {

  3. base.OnCreate(bundle);

  4. SetContentView(Resource.Layout.Main);

  5. string url = "http://192.168.1.172:100/api/news";

  6. <span style="color:#ff0000;"> var client = new RestClient(url);//创建客户端请求

  7. var request = new RestRequest();

  8. //RestResponse response = (RestResponse)client.Execute(request);

  9. //string responseStr = response.Content; 这两句获取json字符串,下面两句获取集合也很简洁

  10. IRestResponse<List<News>> responseList = client.Get<List<News>>(request);

  11. List<News> list = responseList.Data;</span>

  12. //string content = AccessData.GetRouteData(url ); //接收到响应的json 字符串

  13. //List<News> list = JsonConvert.DeserializeObject<List<News>>(content); //已经获取到远程数据的List<News>和之前的本地data就是一样的了。

  14. adapter = new NewsAdapter(list,this);

  15. lv_test = FindViewById<ListView>(Resource.Id.lv_test);

  16. View lv_header = LayoutInflater.Inflate(Resource.Layout.lv_header, null);

  17. lv_test.AddHeaderView(lv_header);

  18. lv_test.Adapter = adapter;

  19. }


删除也是差不多的,所以不贴了,只需要这几句就可以了实现发送请求接收响应了。大力推荐使用RestSharp。代码下载址:xamarin android listview调用web api

 

作者:张林

原文地址:http://blog.youkuaiyun.com/kebi007/article/details/52770808

转载随意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值