从另一个类进入catch块时停止startActivity(intent)

时间:2018-01-19 13:21:20

标签: c# android exception xamarin

我正在开发一个Android Xamarin应用程序,其中我有一个带按钮的活动。按钮中的一些代码是:

fsp_SellDet_New_ByItemID fsp_SellDet_New_ByItemID = new fsp_SellDet_New_ByItemID(this);
            fsp_SellDet_New_ByItemID.ExecuteNonQuery(_SellID,
                                                     _ItemID,
                                                     _PodID,
                                                     _ItemSellQty,
                                                     _ItemPrice,
                                                     _ItemPricePer,
                                                     -_BaseDiscount,
                                                     -_AdditionalDiscount,
                                                     _ItemSum,
                                                     _ItemVAT,
                                                     _ItemCode,
                                                     _ItemShortName,
                                                     _ItemBrand,
                                                     _ItemIssue);
            Intent i = new Intent(this, typeof(SellDet));
            StartActivity(i);
            Finish();

我的问题是在ExecuteNonQuery方法中我已经在try和catch块中处理了异常,如下所示:

catch (Exception ex)
        {
            _dlgAlert = new AlertDialog.Builder(this).Create();
            _dlgAlert.SetMessage(ex.Message);
            _dlgAlert.SetTitle(Resources.GetString(Resource.String.Error));
            _dlgAlert.SetButton("OK", delegate { });
            _dlgAlert.Show();
            return;
        }

即使我正在使用“return;”,Android仍会打开下一个活动,因此我无法真正看到异常是什么,因为当AlertDialog出现时,下一个活动已经打开。

如果我在ExecuteNonQuery方法中收到异常,你能给我一些关于如何制作它的建议吗,会弹出一个AlertDialog,它不会进入下一个活动。

或者你可以告诉我如何制作它,这样你就必须在alertDialog上按“OK”然后它会进入激活状态。请记住,AlertDialog位于新创建的类中的executeNonQuery方法内,而不是按钮方法中。

提前谢谢

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决此问题。没有特别的顺序(如果您需要查看其中任何一个的编码示例,请告诉我们):

  1. 不要在ExecuteNonQuery()中捕获异常,而是在调用方法中捕获它

  2. 如果发生异常,ExecuteNonQuery()会返回一个bool,false,如果没有,则trueif然后对StartActivity代码

  3. 进行Action检查
  4. ExecuteNonQuery()传递到您要传递给_dlgAlert.SetButton("OK", delegate { /* Passed in Action executes here */ });的空委托中的ActionStartActvityfrom multiprocessing import Process, Queue from time import sleep id_list = [1,2,3,4,5,6,7,8,9,10] queue = Queue() def mp_worker(queue): while queue.qsize() >0 : record = queue.get() print(record) sleep(1) print("worker closed") def mp_handler(): # Spawn two processes, assigning the method to be executed # and the input arguments (the queue) processes = [Process(target=mp_worker, args=(queue,)) for _ in range(2)] for process in processes: process.start() print('Process started') for process in processes: process.join() if __name__ == '__main__': for id in id_list: queue.put(id) mp_handler() self.parent.current = main 其中的代码