gpt4 book ai didi

android - networkOnMainThread 异常 Android

转载 作者:行者123 更新时间:2023-11-29 22:10:37 25 4
gpt4 key购买 nike

我正在尝试访问服务器以便接收 JSON 字符串。但显然在 Ice Cream Sandwich 中你不能在主线程中进行网络操作,但是 AsyncTask 类让我感到困惑并且无法正常工作。这是我到目前为止所拥有的:

//up in main code
Void blah = null;
URI uri = "kubie.dyndns-home.com/R2Bar2/ingredients.php";
new DownloadFilesTask().execute(uri , blah, blah);


private class DownloadFilesTask extends AsyncTask<URI, Void, Void> {
protected Void doInBackground(URI... uri) {
HttpClient client = new DefaultHttpClient();
String json = "";
int duration = Toast.LENGTH_SHORT;
try {
HttpResponse response = null;
BufferedReader rd = null;
String line = "";
HttpGet request = new HttpGet(uri);
} catch (URISyntaxException e1) {

}
return null;
}

protected void onProgressUpdate(Integer... progress) {

}

protected void onPostExecute(Long result) {

}

它不喜欢我的 HttpGet request = new HttpGet(uri)它说要将 uri 更改为 URI,但它已经是了!我已尝试将所有参数更改为 Void,但我的应用程序只是强制关闭。

有人知道怎么做吗?

最佳答案

But apparently in Ice Cream Sandwich you can't do network operations in the main thread

你可以,但它会在 LogCat 中给你一个警告。而且您不应该在主应用程序线程上执行网络操作,因为它会卡住您的 UI,并可能给您一个“应用程序无响应”(ANR) 对话框。

but the AsyncTask class is confusing me and not working

在您当前的代码中,您实际上并未执行 HttpGet 请求。

It's not liking my HttpGet request = new HttpGet(uri) It says to change uri to URI, but it already is!

不,不是。

doInBackground() 声明中 URI 之后的 ... 意味着此方法接受可变数量的参数。您的 uri 参数实际上是一个 URI[]。如果您只使用一个 URI 调用 execute(),您将通过 uri[0] 获得该 URI >,不是 uri

关于android - networkOnMainThread 异常 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9729825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com