繁体   English   中英

使用Xamarin for Visual Studio调试正在运行的Android应用程序

[英]Debug a running android app using Xamarin for Visual Studio

当应用程序启动时,我让它从本地存储加载一个列表,如果离线,或者如果有网络连接,它将从Web服务加载此列表(然后写入本地存储。

我的问题是,我要调试这个,我需要完全关闭应用程序,然后重新启动它(因此结束visual studio调试会话)

该应用程序将启动,但是当我再次启动应用程序时调用特定方法时,它会崩溃。 我无法弄清楚它在哪里摔倒。 并且由于不再附加调试会话,也没有任何帮助。

奇怪的是。 我甚至尝试在try catch块中包装方法调用和方法的内容(试图弄清楚什么是错的)并且它仍然会崩溃。

这是片段。

 class MyCouncilsFragment:Fragment
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        //my councils
        base.OnCreateView(inflater, container, savedInstanceState);
        var view = this.View ?? inflater.Inflate(Resource.Layout.mycouncils, container, false);
        string councils = GoIO.LoadText(CC.FILE_MYCOUNCILS) ?? "";
        List<Council> mycouncils = Shared.Serialization.Deserialize<List<Shared.Council>>(councils) ?? new List<Council>();
        MyGlobals.myCouncilsList = mycouncils;


        Spinner spncouncils = view.FindViewById<Spinner>(Resource.Id.spnCouncils);           

        if(mycouncils.Count > 0)
        {
            spncouncils.Enabled = true;
            CouncilSpinnerAdapter adapter = new CouncilSpinnerAdapter(Main_Act.context, Resource.Layout.spn_row_text, MyGlobals.myCouncilsList.ToArray());
            spncouncils.Adapter = adapter;

            Button btnSelect = view.FindViewById<Button>(Resource.Id.btnSelect);

            btnSelect.Enabled = true;
            btnSelect.Click += delegate
            {                   
                Council sessionCouncil = MyGlobals.myCouncilsList[spncouncils.SelectedItemPosition];
                //sessionCouncil is not the problem, i've tested that

                try
                {
                    Main_Act.loadLists();
                    //the issue is when this method is called. (however the call works fine when calling it from a different fragment thats basically in the same state)
                }
                catch
                {                        
                }
                //List<Designer> x = Shared.WebServerHelper.WebCall<Designer>("https://" + MyGlobals.sessionCouncil.service_url + "/design/");
                //MyGlobals.sessionColours = x[0];
                //MyGlobals.hintText = MyGlobals.getSubtleColour(MyGlobals.getColor(MyGlobals.sessionColours.controlcolour), 20);

                //var intent = new Intent(this.Activity, typeof(MyDetails_Act));
                //StartActivity(intent);                    
            };

        }
        else
        {
            //List<Council> emptylist = new List<Council>();

            //Council empty = new Council();
            //empty.council_name = "no councils added";
            //emptylist.Add(empty);

            //spncouncils.Enabled = false;

            //Button viewall = view.FindViewById<Button>(Resource.Id.btnSelect);
            //viewall.Visibility = ViewStates.Gone;

            //TextView nb = view.FindViewById<TextView>(Resource.Id.nb);
            //nb.Visibility = ViewStates.Visible;


        }



        return view;
    }

这就是被调用的方法

public static void loadLists()
    {
        try
        {
            //        //  _|          _|_|      _|_|    _|_|_|    
            //        //  _|        _|    _|  _|    _|  _|    _|  
            //        //  _|        _|    _|  _|_|_|_|  _|    _|  
            //        //  _|        _|    _|  _|    _|  _|    _|  
            //        //  _|_|_|_|    _|_|    _|    _|  _|_|_|  


            if (MyGlobals.sessionCouncil != null)
            {
                var connectivityManager = (ConnectivityManager)context.GetSystemService(ConnectivityService);
                var activeConnection = connectivityManager.ActiveNetworkInfo;

                if (activeConnection != null && activeConnection.IsConnected)
                {
                    loadConsentsFromWeb();
                    Console.WriteLine("getting inspectiontypes online");
                    loadInspectionTypesOnline();
                }
                else
                {
                    try
                    {
                        loadConsentsFromFile();
                        loadInspectionTypesOffline();
                    }
                    catch
                    {
                        Toast.MakeText(context, "Unable to load consents from file", ToastLength.Long).Show();

                    }

                }

                try
                {
                    loadBookings();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

            else
            {
                //inspection types failed to load from file or from web. propmt user to reaload app? or something?           
                Toast.MakeText(context, "Definition Elements failed to load, please restart the app", ToastLength.Short).Show();

                System.Environment.Exit(0);
            }
        }
        catch
        {                
        }
    }

请注意,我已经尝试将整个方法放在try块中,应用程序仍在不断崩溃

尝试从命令提示符运行adb logcat ,并在应用程序崩溃时搜索致命异常。 没有足够的评论点,所以我正在使用答案。 对不起=)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM