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. Python 学习之路2

    这是我在大学上机实验的作业 实验一 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 首先,先谈下我的设计思路: 设计思路: 1.    先需判断输入的number是不是一个数字( ...

  2. eclipse环境下基于已构建struts2项目整合spring+hibernate

    本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  3. 去培训机构参加IT培训值不值

    近几年,IT培训机构可谓是琳琅满目,稂莠不齐.培训Java的,培训PHP的,培训大数据的等等吧,不一而足. 自己也算是IT技术圈子待了好多年了,面试过一些机构培训出来的学生,也有几个好哥们在培训机构做 ...

  4. 02-线性结构3 Reversing Linked List

    题目 Sample Input: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 ...

  5. java二进制相关基础

    转载请注明原创出处,谢谢! 说在前面 之前在JVM菜鸟进阶高手之路十(基础知识开场白)的时候简单提到了二进制相关问题,最近在看RocketMQ的源码的时候,发现涉及二进制的内容蛮多,jdk源码里面也是 ...

  6. cinder控制节点集群

    #cinder控制节点集群 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #cinder块存储控制节点.txt.s ...

  7. leetcode算法题2: 合并两个二叉树。递归,如何切入并保持清醒?

    /* Given two binary trees and imagine that when you put one of them to cover the other, some nodes o ...

  8. Spring Boot应用 打包与部署指南

    Spring Boot的打包与部署有何特点? Java Web应用在Spring Boot之前,通常是打包成war(Web application ARchive)包,结合Tomcat来完成部署. 对 ...

  9. php面试之数据结构和算法

    二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...

  10. 使用fastdfs-zyc监控FastDFS文件系统

    1.安装jdk运行环境 jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 此处我使用的jdk7U99 ...