我正在用这个功能为Android应用程序编码:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.conversation_list_activity);
listViewConversationList = FindViewById<ListView>(Resource.Id.listViewConversationPreview);
string url = ConstantManager.HOST;
HttpClient oHttpClient = new HttpClient();
var oTaskGetAsync = oHttpClient.GetAsync(new Uri(url));
oTaskGetAsync.ContinueWith((oHttpResponseMessage) =>
{
var result = oHttpResponseMessage.Result.Content.ReadAsStringAsync().Result;
listConversationPreview = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ConversationPreview>>(result);
ConversationAdapter adapter = new ConversationAdapter(this, listConversationPreview);
RunOnUiThread(() => listViewConversationList.Adapter = adapter);
listViewConversationList.ItemClick += listViewConversationList_ItemClick;
});
}
我成功地运行了它,但在我为Android支持设计导入了一些Nuget软件包之后,现在它抛出了这样一条消息。
我/编舞(1962):跳过了524帧!应用程序可能在其主线程上做了太多工作。
你能告诉我我做错了什么吗?
您可以使用处理程序和操作在Android活动中执行异步操作,因此它们不会使用UI线程。
例子:
protected override void OnResume()
{
base.OnResume();
Handler handler = new Handler();
Action action = async delegate { await UpdateListView(); };
handler.Post(action);
}
private async Task UpdateListView()
{
//Get data from internet with async methods here and update the ListView
}
为什么不将整个异步调用封装在它自己的任务中?虽然我会将其分为服务,但为了简单起见,我会这样做:
protected override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.conversation_list_activity);
listViewConversationList = FindViewById<ListView>(Resource.Id.listViewConversationPreview);
await Task.Run(async() => {
string url = ConstantManager.HOST;
HttpClient oHttpClient = new HttpClient();
string resultString = oHttpClient.GetAsStringAsync(new Uri(url));
listConversationPreview =
Newtonsoft.Json.JsonConvert.DeserializeObject<List<ConversationPreview>>(resultString);
ConversationAdapter adapter = new ConversationAdapter(this, listConversationPreview);
RunOnUiThread(() => listViewConversationList.Adapter = adapter);
listViewConversationList.ItemClick += listViewConversationList_ItemClick;
}
}
一些旁注:当在生命周期方法(oncreate等)中运行像这样的异步东西时,请记住其他生命周期方法仍将被处理,例如OnResume可能会在OnCreate完成之前执行-这可能会导致一些难以调试的非常奇怪的问题。
在本例中,您可能需要WebAPI NUget包
这很好,但我在日志中收到“应用程序可能做了太多工作”消息,并跳过了一系列帧。我该如何解决这个问题?
我正在开发一个应用程序,它应该从网络服务中获取JSON响应,并将每个元素写入列表视图,我读到我应该使用Asyncask来获取HTTP响应,我做到了,我可以从网络服务中检索数据并在TextViews中显示它们。但是当我尝试在列表视图中显示元素时,它不会显示任何内容,并在logcat中给我以下消息: 这是我的主要代码: 我的列表适配器: 最后是搜索结果。java: 那么,我做错了什么?你对此有什么想法
这发生在我将微调值保存到文件时。我已经使用线程来重新使用它的工作。但它仍然不工作...请帮助我...
我查看了StackOverflow的答案,但没找到多少。所以,我这样做是为了练习,就像Hello World使用JSON一样,我从openweather API获得JSON响应。我在EditText中写下城市的名称,然后按下按钮进行搜索,并在日志中显示JSON字符串。 我该怎么做才能不收到那个消息?
我在下面的代码中ping了java Android中的IP列表,但我现在的问题是运行时出现延迟,这个问题显示为“跳过602帧!应用程序可能在其主线程上做了太多工作。”有人能给我推荐一个解决方案吗?因为我是android的初学者
在我的viewpager实现中,我正在膨胀视图(而不是片段)。我的主课是拓展活动。当我尝试从我的应用程序或应用程序中滑动屏幕时,我会遇到此错误 和 CustomPagerAdapter: 我的活动: 是实验室布局吗: