从MonoTouch应用程序到MonoDroid的重写
我将把应用程序从Monotouh重写为android的Monodroid应用程序。如果我错了,请纠正我。逻辑与MonoTouch中的相同,还是改变了什么?如果有什么变化,请告诉我,什么 据我所知,只有GIU改变了。提前谢谢 这是我从服务器调用数据的代码:从MonoTouch应用程序到MonoDroid的重写,mono,xamarin.ios,cross-platform,xamarin.android,Mono,Xamarin.ios,Cross Platform,Xamarin.android,我将把应用程序从Monotouh重写为android的Monodroid应用程序。如果我错了,请纠正我。逻辑与MonoTouch中的相同,还是改变了什么?如果有什么变化,请告诉我,什么 据我所知,只有GIU改变了。提前谢谢 这是我从服务器调用数据的代码: namespace Mobile{ public static class SiteHelper { public static string DbPath = Path.Combine (Environment.GetFolderPa
namespace Mobile{
public static class SiteHelper
{
public static string DbPath = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), "Sql_1.4.sqlite");
public const string TempDbPath = "./Sql.sqlite";
public static UIView View { get; set; }
public static BaseController Controller { get; set; }
private static event NIHandler _noInternetHandler;
private static bool _noInternetShoved = false;
public static string SiteDomain = "http://mysite.com"; //files which connecting to the DB on server (.asx files)
private delegate void NIHandler ();
public static XDocument DoRequest (string Request)
{
if (_noInternetHandler != null) {
foreach (var del in _noInternetHandler.GetInvocationList()) {
_noInternetHandler -= del as NIHandler;
}
}
if (Controller != null)
_noInternetHandler += new NIHandler (Controller.PushThenNoInternet);
string CryptoString = "";
string Language = "ru";
using (MD5 md5Hash = MD5.Create()) {
string hashKey = Guid.NewGuid ().ToString ().Substring (0, 4);
CryptoString = Request + (Request.Contains ("?") ? "&" : "?") + "hash=" + GetMd5Hash (
md5Hash,
"myprogMobhash_" + hashKey
) + "&hashKey=" + hashKey + "&language=" + Language;
UIActivityIndicatorView _preloader = null;
if (Controller != null) {
Controller.InvokeOnMainThread (delegate() {
_preloader = new UIActivityIndicatorView (UIActivityIndicatorViewStyle.Gray);
if (View != null && Request.IndexOf ("login.ashx") == -1
&& Request.IndexOf ("yandex") == -1
&& Request.IndexOf ("GetDialogMessages") == -1) {
lock (_preloader) {
if (_preloader != null && !_preloader.IsAnimating)
_preloader.HidesWhenStopped = true;
_preloader.Frame = new RectangleF (150, 170, 30, 30);
_preloader.Transform = MonoTouch.CoreGraphics.CGAffineTransform.MakeScale ((float)1.3, (float)1.3);
_preloader.StartAnimating ();
View.Add (_preloader);
}
}
});
}
/*ctx.GetText(Resource.String.SiteAddress)*/
Stream Stream = null;
try {
HttpWebRequest request = new HttpWebRequest (new Uri (SiteDomain + "/FolderWithFiles/" + CryptoString));
request.Timeout = 8000;
Stream = request.GetResponse ().GetResponseStream ();
_noInternetShoved = false;
if (_noInternetHandler != null)
_noInternetHandler -= new NIHandler (Controller.PushThenNoInternet);
} catch (WebException) {
if (_noInternetHandler != null)
_noInternetHandler.Invoke ();
var resp = new XDocument (new XElement ("Response",
new XElement ("status", "error"),
new XElement ("error", "Отсутствует интернет"))
);
return resp;
}
StreamReader Sr = new StreamReader (Stream);
string Resp = Sr.ReadToEnd ();
XDocument Response = XDocument.Parse (Resp.Substring (0, Resp.IndexOf ("<html>") == -1 ? Resp.Length : Resp.IndexOf ("<!DOCTYPE html>")));
string Hash = Response.Descendants ().Where (x => x.Name == "hash")
.FirstOrDefault ().Value;
string HashKey = Response.Descendants ().Where (x => x.Name == "hashKey")
.FirstOrDefault ().Value;
Sr.Close ();
Stream.Close ();
if (Controller != null && _preloader != null) {
Controller.InvokeOnMainThread (delegate() {
lock (_preloader) {
_preloader.StopAnimating ();
_preloader.RemoveFromSuperview ();
}
});
}
if (VerifyMd5Hash (
md5Hash,
"mobileSitehash_" + HashKey,
Hash
))
return Response;
else
throw new Exception ();
}
}
public static XDocument DoWriteFileRequest (string Request, byte[] file)
{
string CryptoString = "";
string Language = "ru";
using (MD5 md5Hash = MD5.Create()) {
string hashKey = Guid.NewGuid ().ToString ().Substring (0, 4);
CryptoString = Request + (Request.Contains ("?") ? "&" : "?") + "hash=" + GetMd5Hash (
md5Hash,
"mobileMobhash_" + hashKey
) + "&hashKey=" + hashKey + "&language=" + Language;
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create (SiteDomain + "/misc/mobile/" + CryptoString);
Req.Method = "POST";
Stream requestStream = Req.GetRequestStream ();
requestStream.Write (file, 0, file.Length);
requestStream.Close ();
Stream Stream = Req.GetResponse ().GetResponseStream ();
StreamReader Sr = new StreamReader (Stream);
string Resp = Sr.ReadToEnd ();
XDocument Response = XDocument.Parse (Resp);
string Hash = Response.Descendants ().Where (x => x.Name == "hash")
.FirstOrDefault ().Value;
string HashKey = Response.Descendants ().Where (x => x.Name == "hashKey")
.FirstOrDefault ().Value;
Sr.Close ();
Stream.Close ();
if (VerifyMd5Hash (
md5Hash,
"mobileSitehash_" + HashKey,
Hash
))
return Response;
else
throw new Exception ();
}
}
public static string GetMd5Hash (MD5 md5Hash, string input)
{
// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hash.ComputeHash (Encoding.UTF8.GetBytes (input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder ();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++) {
sBuilder.Append (data [i].ToString ("x2"));
}
// Return the hexadecimal string.2
return sBuilder.ToString ();
}
//Geting the info for my app
public static List<PackageListModel> GetUserPackages (int UserID)
{
List<PackageListModel> Events = new List<PackageListModel> ();
string Req = "SomeFile.ashx?UserID=" + UserID;
XDocument XmlAnswer = DoRequest (Req);
if (XmlAnswer.Descendants ("status").First ().Value == "ok") {
foreach (var el in XmlAnswer.Descendants ("Response").First ().Descendants().Where(x=>x.Name == "Event")) {
PackageListModel Event = null;
Event = new PackageListModel ()
{
ID = int.Parse(el.Attribute("ID").Value),
Title = el.Element("Title").Value,
Date = el.Element("Date").Value,
Price = el.Element("Price").Value,
ImageUrl = el.Element("ImageUrl").Value,
Location = el.Element("Location").Value
};
Events.Add (Event);
}
}
return Events;
}
//Получить пользовательские поездки
public static List<TransporterListModel> GetUserTransporters (int UserID)
{
List<TransporterListModel> Events = new List<TransporterListModel> ();
string Req = "SomeFile.ashx?UserID=" + UserID;
XDocument XmlAnswer = DoRequest (Req);
if (XmlAnswer.Descendants ("status").First ().Value == "ok") {
foreach (var el in XmlAnswer.Descendants ("Response").First ().Descendants().Where(x=>x.Name == "Event")) {
TransporterListModel Event = null;
Event = new TransporterListModel ()
{
ID = int.Parse(el.Attribute("ID").Value),
Date = el.Element("Date").Value,
Price = el.Element("Price").Value,
TransportsStr = el.Element("Transports").Value,
Location = el.Element("Location").Value
};
Events.Add (Event);
}
}
return Events;
}
}
}
名称空间移动{
公共静态类SiteHelper
{
公共静态字符串DbPath=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),“Sql_1.4.sqlite”);
public const字符串TempDbPath=“./Sql.sqlite”;
公共静态UIView视图{get;set;}
公共静态BaseController控制器{get;set;}
私有静态事件NIHandler\u noInternetHandler;
私有静态bool\u noInternetShoved=false;
公共静态字符串SiteDomain=”http://mysite.com“;//连接到服务器上数据库的文件(.asx文件)
私有委托处理程序();
公共静态XDocument DoRequest(字符串请求)
{
if(_noInternetHandler!=null){
foreach(internethandler.GetInvocationList()中的变量del){
_noInternetHandler-=del作为NIHandler;
}
}
如果(控制器!=null)
_noInternetHandler+=新的NIHandler(Controller.PushThenNoInternet);
字符串CryptoString=“”;
字符串语言=“ru”;
使用(MD5 md5Hash=MD5.Create()){
字符串hashKey=Guid.NewGuid().ToString().Substring(0,4);
CryptoString=Request+(Request.Contains(“?”?”?&):“?”+”散列=“+GetMd5Hash(
md5Hash,
“myprogMobhash_”+哈希键
)+“&hashKey=“+hashKey+”&language=“+language;
UIActivityIndicatorView _preload=null;
如果(控制器!=null){
Controller.InvokeOnMainThread(委托(){
_预加载程序=新UIActivityIndicatorView(UIActivityIndicatorViewStyle.Gray);
if(View!=null&&Request.IndexOf(“login.ashx”)=-1
&&Request.IndexOf(“yandex”)=-1
&&Request.IndexOf(“GetDialogMessages”)=-1){
锁定(预加载程序){
if(_preload!=null&&!_preload.IsAnimating)
_preload.HidesWhenStopped=true;
_预紧器框架=新矩形F(150、170、30、30);
_preload.Transform=MonoTouch.CoreGraphics.CGAffineTransform.MakeScale((float)1.3,(float)1.3);
_preload.StartAnimating();
视图。添加(_预加载程序);
}
}
});
}
/*GetText(Resource.String.SiteAddress)*/
Stream=null;
试一试{
HttpWebRequest请求=新的HttpWebRequest(新Uri(SiteDomain+“/FolderWithFiles/”+CryptoString));
请求超时=8000;
Stream=request.GetResponse().GetResponseStream();
_noInternetShoved=false;
if(_noInternetHandler!=null)
_noInternetHandler-=新的NIHandler(Controller.PushThenNoInternet);
}捕获(WebException){
if(_noInternetHandler!=null)
_noInternetHandler.Invoke();
var resp=新的XDocument(新的XElement(“响应”),
新元素(“状态”、“错误”),
新元素(“错误”、“错误”)
);
返回响应;
}
StreamReader Sr=新的StreamReader(流);
string Resp=Sr.ReadToEnd();
XDocument Response=XDocument.Parse(Resp.Substring(0,Resp.IndexOf(“”)=-1?Resp.Length:Resp.IndexOf(“”));
字符串Hash=Response.subjects()。其中(x=>x.Name==“Hash”)
.FirstOrDefault().Value;
字符串HashKey=Response.subjects()。其中(x=>x.Name==“HashKey”)
.FirstOrDefault().Value;
高级Close();
Stream.Close();
如果(控制器!=null&&u预加载程序!=null){
Controller.InvokeOnMainThread(委托(){
锁定(预加载程序){
_preload.stoppanimating();
_preload.RemoveFromSuperview();
}
});
}
如果(VerifyMd5Hash(
md5Hash,
“mobileSitehash_u2;”+哈希键,
搞砸
))
返回响应;
其他的
抛出新异常();
}
}
公共静态XDocument DoWriteFileRequest(字符串请求,字节[]文件)
{
字符串CryptoString=“”;
字符串语言=“ru”;
使用(MD5 md5Hash=MD5.Create()){
字符串hashKey=Guid.NewGuid().ToString().Substring(0,4);
CryptoString=Request+(Request.Contains(“?”?”?&):“?”+”散列=“+GetMd5Hash(
md5Hash,
“mobileMobhash_u2;”+哈希键
)+“&hashKey=“+hashKey+”&language=“+language;
HttpWebRequest Req=(HttpWebRequest)WebRequest.Create(SiteDomain+“/misc/mobile/”+CryptoString);
请求方法=“POST”;
Stream requestStream=Req.GetRequestStream();
Write(file,0,file.Length);
Close();
Stream=Req.GetResponse().GetResponseStream();
StreamReader Sr=新的StreamReader(流);
string Resp=Sr.ReadToEnd();
XDocument Response=XDocument.Parse(Resp);
string Hash=Response.subjects()。其中(x=>x.Na