【发布时间】:2017-06-13 08:23:06
【问题描述】:
我遇到了这个问题,我的 Xamarin Android 应用程序出现未处理的异常崩溃。我正在尝试使用用户会话令牌将用户登录到parse.com。这些语句放在 try-catch 块中以捕获异常。但是 catch 块无法从 parse.com 和应用程序崩溃中捕获“无效会话令牌”错误。如果我手动篡改 sessionToken,Catch 块可以正常工作。
这就是我正在做的事情
try {
await ParseUser.BecomeAsync(sessionToken);
...
} catch (Exception e){
//log exception
}
当出现无效会话令牌错误时,上面的代码会崩溃并显示“未处理的异常......”,即使它被放在了 try 块中。
以下代码有效。 (手动篡改令牌)
try {
await ParseUser.BecomeAsync(sessionToken + "test");
...
} catch (Exception e){
//log exception
}
我错过了什么?
此外,相同的代码也适用于 Xamarin.iOS。
编辑添加 StackTrace
at Parse.Internal.ParseCommandRunner+<>c__DisplayClass2.<RunCommandAsync>b__1 (System.Threading.Tasks.Task`1[TResult] t) [0x000eb] in <5d1c0c2b96a7483d85e5c63b3e156125>:0
at Parse.Internal.InternalExtensions+<>c__DisplayClass1`2[TIn,TResult].<OnSuccess>b__0 (System.Threading.Tasks.Task t) [0x00000] in <5d1c0c2b96a7483d85e5c63b3e156125>:0
at Parse.Internal.InternalExtensions+<>c__DisplayClass7`1[TResult].<OnSuccess>b__6 (System.Threading.Tasks.Task t) [0x0006f] in <5d1c0c2b96a7483d85e5c63b3e156125>:0
at System.Threading.Tasks.ContinuationResultTaskFromTask`1[TResult].InnerInvoke () [0x00024] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Threading.Tasks.Task.Execute () [0x00010] in <3fd174ff54b146228c505f23cf75ce71>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0
at Parse.Internal.InternalExtensions+<>c__DisplayClass7`1[TResult].<OnSuccess>b__6 (System.Threading.Tasks.Task t) [0x00033] in <5d1c0c2b96a7483d85e5c63b3e156125>:0
at System.Threading.Tasks.ContinuationResultTaskFromTask`1[TResult].InnerInvoke () [0x00024] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Threading.Tasks.Task.Execute () [0x00010] in <3fd174ff54b146228c505f23cf75ce71>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0
at Parse.Internal.InternalExtensions+<>c__DisplayClass7`1[TResult].<OnSuccess>b__6 (System.Threading.Tasks.Task t) [0x00033] in <5d1c0c2b96a7483d85e5c63b3e156125>:0
at System.Threading.Tasks.ContinuationResultTaskFromTask`1[TResult].InnerInvoke () [0x00024] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Threading.Tasks.Task.Execute () [0x00010] in <3fd174ff54b146228c505f23cf75ce71>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <3fd174ff54b146228c505f23cf75ce71>:0
at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <3fd174ff54b146228c505f23cf75ce71>:0
at Hyphen_App.Droid.SplashActivity+<setCurrentUser>d__4.MoveNext () [0x00035] in /Chethan Shetty/GIT/android-parent/Hyphen_App.Droid/Splash/SplashActivity.cs:112
编辑 1 将 setCurrentUser 更改为跟随后,我能够捕捉到异常,但在 3-4 秒后应用程序自行崩溃并给出“System.AggregateException”
void setCurrentUser(string sessionToken,Action<bool> callback){
try {
ParseUser.BecomeAsync(sessionToken).Wait();
callback(true);
}catch(AggregateException e){
e.Handle( x => { return true; });
callback(false);
}
【问题讨论】:
-
您确定省略的代码不相关吗?你能包括异常的堆栈跟踪吗?
-
@woelliJ 添加了堆栈跟踪。
-
你怎么称呼你的方法
setCurrentUser? -
从 SplashActivity.cs 的 onCreate() 调用
-
你在等吗?当你不等待任务时,有时它不会被正确调用
标签: xamarin parse-platform xamarin.ios xamarin.android xamarin-studio