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

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<News> list = new List<News>() {
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<News> GetAllNews()
{
return list;
}
[HttpGet]
public List<News> 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<News> 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<News>() {
// 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<News> list = JsonConvert.DeserializeObject<List<News>>(content); //已经获取到远程数据的List<News>和之前的本地data就是一样的了。
adapter = new NewsAdapter(list,this);
lv_test = FindViewById<ListView>(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<Button>(Resource.Id.btn_delete);
holder.title = convertView.FindViewById<TextView>(Resource.Id.tv_title);
holder.pv = convertView.FindViewById<TextView>(Resource.Id.tv_pv);
}
else
{
convertView.Tag = holder;
}
holder.pv.Text = data[position].Pv.ToString();
holder.title.Text = data[position].Title;
holder.btn.Click += (s, e) => DeleteClick(data[position].Id,position);
return convertView;
}
public void DeleteClick(int id,int position)
{
string url = "http://192.168.1.172:100/api/news/"+id;
string content = AccessData.GetRouteData(url); //已经接收到响应的json 字符串
Toast.MakeText(context,data[position].Title+"删除成功",ToastLength.Short).Show();
List<News> list = JsonConvert.DeserializeObject<List<News>>(content);
data = list;
NotifyDataSetChanged();
}
}
public class ViewHolder:Java.Lang.Object
{
public TextView title;
public TextView pv;
public Button btn;
}

好了,这样就大功告成了。那么问题来了,上面发送http请求,然后又接收响应再序列化,这还仅仅是一个简单的例子,要是复杂实用一点的话,要写很多很多代码,这里我推荐一个非常好的第三方组件,http请求响应第三方组件RestSharp用的非常广泛。用法很简单,看完这篇大概你就懂了RestSharp的10分钟入门实例。我为什么推荐大家使用这个第三方组件呢,因为本屌所在公司也是用这个的,好东西,就是要懂得分享,当然那种直接利用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";
<span style="color:#ff0000;"> var client = new RestClient(url);//创建客户端请求
var request = new RestRequest();
//RestResponse response = (RestResponse)client.Execute(request);
//string responseStr = response.Content; 这两句获取json字符串,下面两句获取集合也很简洁
IRestResponse<List<News>> responseList = client.Get<List<News>>(request);
List<News> list = responseList.Data;</span>
//string content = AccessData.GetRouteData(url ); //接收到响应的json 字符串
//List<News> list = JsonConvert.DeserializeObject<List<News>>(content); //已经获取到远程数据的List<News>和之前的本地data就是一样的了。
adapter = new NewsAdapter(list,this);
lv_test = FindViewById<ListView>(Resource.Id.lv_test);
View lv_header = LayoutInflater.Inflate(Resource.Layout.lv_header, null);
lv_test.AddHeaderView(lv_header);
lv_test.Adapter = adapter;
}

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

作者:张林

原文地址:http://blog.csdn.net/kebi007/article/details/52770808

转载随意!

[置顶] Xamarin android 调用Web Api(ListView使用远程数据)的更多相关文章

  1. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)

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

  2. [置顶] Xamarin android如何调用百度地图入门示例(一)

    在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...

  3. [置顶] Xamarin android中使用signalr实现即时通讯

    前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...

  4. [置顶] xamarin android自定义spinner

    以前弄的一个下拉框时自带的spinner,感觉好丑,实际效果实在满足不了基本的UI界面要求,还是自己动手丰衣足食,看了网上关于android中自定义spinner的文章,感觉实现原理还是比较简单,所以 ...

  5. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  6. [置顶] xamarin android自定义标题栏(自定义属性、回调事件)

    自定义控件的基本要求 这篇文章就当是自定义控件入门,看了几篇android关于自定义控件的文章,了解了一下,android自定义控件主要有3种方式: 自绘控件:继承View类,所展示的内容在OnDra ...

  7. [置顶] xamarin android使用zxing扫描二维码

    好久没写了,这片文章篇幅不长,概述一下在xamarin android中用 ZXing.Net.Mobile库扫描二维码读取url的示例.扫码支付,扫码登录,App上各种各样的扫码,好像没个扫码的就有 ...

  8. [置顶] xamarin android 布局尺寸了解

    为了使UI界面在不同大小的移动端显示器上能够正常显示,大家可能都知道使用sp作为字体大小的单位,dp作为其他元素长度的单位. 前几天看了一篇文章关于 App设计规范的,文章用心写的非常好,这里是链接  ...

  9. [置顶] xamarin android Fragment实现底部导航栏

    前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment  Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...

随机推荐

  1. 使用numpy实现批量梯度下降的感知机模型

    生成多维高斯分布随机样本 生成多维高斯分布所需要的均值向量和方差矩阵 这里使用numpy中的多变量正太分布随机样本生成函数,按照要求设置均值向量和协方差矩阵.以下设置两个辅助函数,用于指定随机变量维度 ...

  2. laravel5.3统计 withCount()方法的使用

    在laravel5.3之后可以使用withCount()这个方法. 注意:一定要是5.3版本之后,5.2和5.1都会报方法未定义 举个栗子: App\Post::withCount('comments ...

  3. Less注释语法

    Less注释语法 适当的注释是保证代码可读性的必要手段,Less支持两种类型的注释:多行注释和单行注释. 1)形如 /* */ 的多行注释.如: /* Hello, I'm a CSS-style c ...

  4. 【javaFX学习】(二) 面板手册--1

    找了好几个资料,没找到自己想要的,自己写个列表吧,方便以后用的时候挑选,边学边记.以学习笔记为主,所以会写的会偏个人记忆性.非教程,有什么问题一起讨论啊. 各个不同的控件放入不同的面板中有不同的效果, ...

  5. Django的分页器(paginator)

    先导入模块: from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 分页器paginator 下面的所有方法 ...

  6. openstack集群环境准备

    #0.openstack集群环境准备 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #openstack集群环境准 ...

  7. Python资料汇总(建议收藏)

    整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. https://st ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(88)-Excel导入和导出-主从表结构导出

    前言 前面一篇详细讲解了导入导出,本节演示混合结构的导出功能!同时提供代码下载.. 代码下载 vs2015+无数据库 先看效果图:这个一个混合的Excel,列表与自定义信息的混合! 我们的步骤大概分为 ...

  9. Java中的比较总结

    Java中的比较问题是一个很基础又很容易混淆的问题.今天就几个容易出错的点作一个比较详细的归纳与整理,希望对大家的学习与面试有帮助. 一.==与equals()的区别 首先,我们需要知道==与equa ...

  10. 【NOIP2013提高组】火柴排队

    https://www.luogu.org/problem/show?pid=1966 Σ(ai-bi)2=Σai2+Σbi2-2Σai*bi,要使Σ(ai-bi)2最小,则需2Σai*bi最大. 由 ...