- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我昨天开始使用 Xamarin for Android,是的,它非常好。当然,我和每个人一样,肯定会有一些错误。
我尝试的只是使用以下代码行异步下载 www.google.com 的 HTML:
private async void btnAuthenticate_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, "method is being called", ToastLength.Long).Show();
string test = await Task.Run(() => new WebClient().DownloadString("http://google.de/"));
Toast.MakeText(this, test, ToastLength.Long).Show();
}
单击按钮时,会出现 Toast“正在调用方法”,几乎没有其他内容。起初它至少需要 1 1/2 分钟才能显示出一些 react ,要么应用程序崩溃,什么都不做,要么打印出我想要的内容。让我们说在 10 次尝试中它打印出预期的 2 倍。
我用 WPF C# 桌面应用程序尝试了相同的代码,它工作正常。
应用程序甚至不会卡住或发生其他情况。调试器的输出大致相同:
“ worker 开始”或者有时它说“爬山,改变最大线程数 x”或者“线程开始:#X”我不知道这是否相关。
此外,我正在使用 Visual Studio 2015 和 Xamarin for Android(目前为 30 天试用版)。
编辑:我修改了应用程序以在应用程序以相同行为启动后立即开始下载网页。然后我从中创建了一个 logcat 日志,您可以看到 here .
Edit²:这次我还使用 Xamarin Studio 创建了一个新项目。我修改了以下内容:
这是这个应用程序的源代码,有人可以自己尝试一下并告诉我是否也需要超过 30 秒才能发出这个 web 请求,实际上应该在 1-2 秒内完成。 Here is the demo project .
希望大家帮帮我。提前致谢。
最佳答案
您的代码的异步性质没有任何问题; Toast
仅用于显示短 消息。
对我来说,对 http://google.de/
的网络请求包含大约 48k 个字符。为 Toast
提供那么多内容会导致它在构建要呈现到屏幕的 View 时锁定 UI 线程。
您可以通过在 Web 请求周围包装一个进度对话框来验证代码确实是异步的:
var pd = ProgressDialog.Show(this, "Downloading...", "Fetching content from \"http://google.de/\"");
string content = await Task.Run(() => new WebClient().DownloadString("http://google.de/"));
pd.Dismiss();
您会注意到 ProgressDialog
将出现并旋转(这意味着 web 请求在后台线程中,因为 UI 未锁定)并且当 web 请求时它将关闭任务完成。
关于c# - Xamarin Android DownloadString 需要很长时间甚至无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583685/
我想从谷歌财经导入文本数据,我用这个http地址作为参数来DownloadString http://www.google.com/finance/getprices?i= 1200&p=1d&f=d
我有一个简单的功能可以从特定页面的以下代码中抓取突然出现 503 错误的网页: try { WebClient client = new WebClient(); client.Proxy =
我正在尝试从 Amazon 下载 html 文档,但由于某种原因,我得到了一个错误的编码字符串,例如“�� K��g��g�e”。 这是我尝试过的代码: using (var webClient =
我有一个名为 GetIP 的函数,我在启动时和用户按下按钮时调用该函数。由于某种原因,它在启动时不会崩溃,但在使用按钮调用该函数时会崩溃。没有异常(exception),什么都不会卡住。 函数代码:
这个问题在这里已经有了答案: C# WebClient disable cache (12 个答案) 关闭 7 年前。 我正在使用这段代码从 URL 获取返回字符串 webClient.Encodi
只是一段代码 WebClient wc = new WebClient(); String str = wc.DownloadString(new Uri("http://content.warfra
我正在开发一个使用 ASP.Net 3.5 运行的 Web 应用程序 在应用程序的某处,我正在调用外部系统。此调用包括从特定 url 下载字符串: string targetUrl = BuildMy
我遇到了一个关于 WebClient.DownloadString 的奇怪问题,我似乎无法解决,我的代码: Dim client As New WebClient() Dim html = clien
这个问题在这里已经有了答案: WebClient.DownloadString result is not match with Browser result 2 (3 个答案) 关闭 5 年前。
WebClient client = new WebClient(); string url = "https://someurl.com/..." string get = client.Dow
我正在使用 webclient 从在线共享点下载 XML 文件。 但是,当我使用 WebClient.DownloadString(string url) 方法时,一些字符没有被正确解码。 当我使用
我正在尝试查看 http://simpledesktops.com/browse/desktops/2012/may/17/where-the-wild-things-are/ 的来源使用代码: St
对 WebClient.DownloadString 的调用给出了第一次机会异常: IOException: The specified registry key does not exist. 一段
我想从海盗湾的搜索查询中获取源代码,我的代码中有这个但它没有返回任何内容: WebClient webpage = new WebClient(); string source= webpage.D
我在为我正在构建的屏幕抓取工具从网上下载一些内容时遇到问题。 在下面的代码中,从 Web 客户端下载字符串方法返回的字符串返回一些奇怪的字符用于少数(不是所有)网站的源下载。 我最近添加了 http
任何人都知道我可以如何修改下面的 DownloadString 以便我也可以传递基本的身份验证凭据? 我正在使用与 PsGet (http://psget.net/) 相同的技术来下载我自己的内部脚本
我正在使用 WebClient.DownloadString() 方法下载一些数据。我正在使用以下代码: static void Main(string[] args) { s
我昨天开始使用 Xamarin for Android,是的,它非常好。当然,我和每个人一样,肯定会有一些错误。 我尝试的只是使用以下代码行异步下载 www.google.com 的 HTML:
我想知道在使用 WebClient.DownloadString 时我应该保护自己免受哪些异常的影响。 这是我目前使用它的方式,但我相信你们可以建议更好、更健壮的异常处理。 例如,在我的脑海中: 没有
我正在尝试使用正则表达式从网站检索名称。但是,当我运行该程序时,使用“路径中的非法字符”出现错误。这是代码: private void button1_Click(object sender, Eve
我是一名优秀的程序员,十分优秀!