我不知道该说些什么。 我有这种方法:
#define DECL_FL(IE) 1e##IE##f
#define DECL_FL_E_NEG(IE) 1e-##IE##f
float val[] =
{
DECL_FL(12),
DECL_FL_E_NEG(12),
DECL_FL(12),
};
没什么特别的。 执行client.SendAsync(rm),response.StatusCode正常。 从此方法退出时,应用程序只会崩溃。
输出仅显示此断言:
public async Task<HttpResponseMessage> SendAsyncRequest(string uri, string content, HttpMethod method, bool tryReauthorizeOn401 = true)
{
HttpRequestMessage rm = new HttpRequestMessage(method, uri);
if (!string.IsNullOrWhiteSpace(content))
rm.Content = new StringContent(content, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.SendAsync(rm);
if (response.StatusCode == HttpStatusCode.Unauthorized && tryReauthorizeOn401)
{
var res = await AuthenticateUser();
if(res.user == null)
return response;
return await SendAsyncRequest(uri, content, method, false);
}
return response;
}
仅此而已。 客户端是HttpClient。 我在Android项目中进行了设置: HttpClient实施设置为Android。
有人知道什么地方可能出问题吗?
修改
SendAsyncRequest的用法如下:
12-16 20:09:22.025 F/ ( 1683): * Assertion at /Users/builder/jenkins/workspace/xamarin-android-d15-9/xamarin-android/external/mono/mono/mini/debugger-agent.c:4957, condition `is_ok (error)' not met, function:set_set_notification_for_wait_completion_flag, Could not execute the method because the containing type is not fully instantiated. assembly:<unknown assembly> type:<unknown type> member:(null)
12-16 20:09:22.025 F/libc ( 1683): Fatal signal 6 (SIGABRT), code -6 in tid 1683 (omerang.Android)
答案 0 :(得分:2)
根据您提供的示例项目代码
protected override async void OnStart()
{
Controller c = new Controller();
TodoItem item = await c.GetTodoItem(1);
TodoItem item2 = await c.GetTodoItem(2);
}
您正在呼叫async void
并在启动时忘记了。
您将无法捕获任何引发的异常,这将解释为什么App崩溃而没有警告。
引用Async/Await - Best Practices in Asynchronous Programming
async void
仅应与事件处理程序一起使用,因此我建议添加一个事件和处理程序。
根据提供的示例,它可能如下所示
public partial class App : Application {
public App() {
InitializeComponent();
MainPage = new MainPage();
}
private even EventHander starting = delegate { };
private async void onStarting(object sender, EventArgs args) {
starting -= onStarting;
try {
var controller = new Controller();
TodoItem item = await controller.GetTodoItem(1);
TodoItem item2 = await controller.GetTodoItem(2);
} catch(Exception ex) {
//...handler error here
}
}
protected override void OnStart() {
starting += onStarting;
starting(this, EventArgs.Empty);
}
//...omitted for brevity
}
这样,您现在至少应该能够捕获引发的异常以确定失败的原因。
答案 1 :(得分:1)
尝试将您的compileSdkVersion更新为更高版本并进行检查。 也请尝试
> Go to: File > Invalidate Caches/Restart and select Invalidate and Restart