将C#程序布署到Android的复杂Demo
如果需要重新编写代码,几乎任何一门计算机语言都可以跨平台了,还用得着Java嘛,而且像PHP/C#等语言不需要修改代码都可以跨Windows/Linux。C#是一种优异的编程言语,语法之文雅,代码之简便使得浩瀚软粉多年来对她不离不弃。可是怎样将C#程序部署到Linux,Android等平台,这固然是得依托尽人皆知的Mono。本文Demo程序对照复杂,完成了经由过程HttpRequest查询天色,最后的效果以下:
1.下载并安装Xamarin
http://xamarin.com/download
注册Xamarin账号,Role选择Academic(学者)便可;
运转XamarinInstaller.exe在线安装程序,必要一个优秀的收集情况,所需的安装程序体积约莫1.44G,安装历程一起默许便可。
2.破解
网上找的破解:http://download.csdn.net/detail/flydoos/5820325
解紧缩后,将文件掩盖到指定地位便可。
3.开辟
开辟MonoAndroid程序可使用XamarinStudio,也能够利用VisualStudio,倡议利用VS,由于Xamarin对VS供应有壮大的插件再共同VS自己壮大的功效,会使开辟事情瓮中之鳖,别的XamarinStudio今朝还不敷完美,好比增加援用以后,必要重启。
a.创立Android项目,以下图:
b.项目文件布局,以下图:
c.页面文件
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout1"
android:layout_marginBottom="5dip"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="5dip">
<TextView
android:id="@+id/LblCity"
android:text="@string/PressCity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<EditText
android:id="@+id/TxtWeather"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:lines="1"/>
</LinearLayout>
我们能够看出,一切的控件均放在LinearLayout中,这是一个部局控件,LinearLayout又分为程度结构和垂直结构,好比一行中必要安排多个控件,这时候候就必要用到程度结构。
d.cs文件
我们所熟习的C#,将在这里年夜展拳脚,统统看上往都是那末亲热。
usingSystem;
usingAndroid.App;
usingAndroid.Content;
usingAndroid.Runtime;
usingAndroid.Views;
usingAndroid.Widget;
usingAndroid.OS;
usingSystem.IO;
namespaceAndroidHelloWorld
{
publicclassActivity1:Activity
{
protectedoverridevoidOnCreate(Bundlebundle)
{
base.OnCreate(bundle);
//Setourviewfromthe"main"layoutresource
SetContentView(Resource.Layout.Main);
//Getourbuttonfromthelayoutresource,
//andattachaneventtoit
Buttonbutton=FindViewById<Button>(Resource.Id.MyButton);
EditTexttxtWeather=FindViewById<EditText>(Resource.Id.TxtWeather);
//天色查询了局
TextViewlblCity=FindViewById<TextView>(Resource.Id.LblCityRst);//乡村
TextViewlblCurTmp=FindViewById<TextView>(Resource.Id.LabCurTempRst);//以后温度
TextViewlblWeather=FindViewById<TextView>(Resource.Id.LabWeatherRst);//天色
TextViewlblRange=FindViewById<TextView>(Resource.Id.LabRangeRst);//局限
TextViewlblUptTime=FindViewById<TextView>(Resource.Id.LabUptTimeRst);//更新工夫
button.Click+=(sender,e)=>
{
HttpHelperhelper=newHttpHelper();
stringsUrl=String.Format(@"http://cgi.appx.qq.com/cgi/qqweb/weather/wth/weather.do?retype=1&city={0}&t={1}",
Uri.EscapeDataString(txtWeather.Text),
DateTime.Now.ToFileTime().ToString());
try
{
varv=helper.HttpGetRequest(sUrl,null,10000,null);
varrst=newStreamReader(v.GetResponseStream(),System.Text.Encoding.GetEncoding(v.CharacterSet));
varvWeather=Newtonsoft.Json.JsonConvert.DeserializeObject<EtWeather>(rst.ReadToEnd());
//varvWeather=jss.Deserialize<EtWeather>(rst.ReadToEnd());
lblCity.Text=vWeather.city;
lblCurTmp.Text=vWeather.now_temperature;
lblWeather.Text=vWeather.now_pic_name;
lblRange.Text=vWeather.temperature_range;
lblUptTime.Text=vWeather.update_time;
}
catch(ExceptionErr)
{
varbuilder=newAlertDialog.Builder(this);
builder.SetMessage(Err.Message);
builder.SetCancelable(false);
builder.SetPositiveButton("OK",delegate{});
vardialog=builder.Create();
dialog.Show();
}
}
}
}
}
必要注重的是,我们如何利用前台页面所界说的控件?今朝我晓得的这类办法,对照烦琐,不晓得是不是另有更间接一点的体例:
TextViewlblCity=FindViewById<TextView>(Resource.Id.LblCityRst);
然后编写HttpHelper类:
publicclassHttpHelper
{
privatereadonlystringDefaultUserAgent="Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.2;SV1;.NETCLR1.1.4322;.NETCLR2.0.50727)";
publicHttpWebResponseHttpGetRequest(stringurl,stringreferer,int?timeout,CookieCollectioncookies)
{
HttpWebRequestrequest=null;
if(url.StartsWith("https",StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback=newRemoteCertificateValidationCallback(CheckValidationResult);
request=WebRequest.Create(url)asHttpWebRequest;
request.ProtocolVersion=HttpVersion.Version10;
}
else
request=WebRequest.Create(url)asHttpWebRequest;
request.Method="GET";
request.ContentType="Application/x-www-form-urlencoded";
request.UserAgent=DefaultUserAgent;
request.CookieContainer=newSystem.Net.CookieContainer();
if(!string.IsNullOrEmpty(referer))
request.Referer=referer;
if(timeout.HasValue)
request.Timeout=timeout.Value;
else
request.Timeout=25000;
if(cookies!=null)
{
request.CookieContainer=newCookieContainer();
request.CookieContainer.Add(cookies);
}
returnrequest.GetResponse()asHttpWebResponse;
}
privateboolCheckValidationResult(objectsender,X509Certificatecertificate,X509Chainchain,SslPolicyErrorserrors)
{
returntrue;
}
接上去就是怎样将WebApi前往的Json复原为工具,这里必要用到Newtonsoft.Json,增加援用的办法以下:1,右击办理计划中的Components文件夹,选择viewdatails,2.找到jons.Net,3.点击AddtoProjct(必要账号考证,利用注册的学者账号便可)。
d.调试及部署
按F5运转,第一次必要创立一个Android摹拟器,这里只必要略微注重一下你所选择Android体系版本,保举利用2.2,由于MonoForAndroid项目默许情形下利用的是2.2的API。
Mono框架没有JIT(团体对这个没有研讨,大概表达得禁绝确,接待拍砖),因而在断点调试的时分你会发明与平常调试C#略有分歧,没法拖动断点,没法修正代码。
关于部署,必需利用Release举行编译,将并天生的APK文件传得手机安装后便可运转,UI与速率与Java开辟的使用无差。
MonoforAndroid,Android开辟我是老手中的老手,向人人进修,让C#runninganywhere.兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.net老师不吝赐教,为小弟这一批迷途的羊羔指一条阳光之道!您也知道:学习技术如果只有一个人摸索,那是一件多么痛苦的事情!还有,如果万辛能得名师或长者指点,那又是多么一件幸福和快乐的事情! asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。 是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。 当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
页:
[1]