从MonoTouch应用程序到MonoDroid的重写

从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

我将把应用程序从Monotouh重写为android的Monodroid应用程序。如果我错了,请纠正我。逻辑与MonoTouch中的相同,还是改变了什么?如果有什么变化,请告诉我,什么

据我所知,只有GIU改变了。提前谢谢

这是我从服务器调用数据的代码:

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