gpt4 book ai didi

java - HttpURLConnection.getInputStream() 挂起并且永远不会完成

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:40 24 4
gpt4 key购买 nike

我正在尝试使用以下代码从 JSON 端点获取 token :

public class FetchToken extends AsyncTask<String, Void, Void> {
String data = "";
String token = "";

public TokenDelegate delegate = null;

@Override
protected Void doInBackground(String... identity) {
try {
if (identity.length == 1) {
URL url = new URL(identity[0]);

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";

while (line != null) {
line = bufferedReader.readLine();
data = data + line;
}

JSONObject JO = new JSONObject(data);
token = JO.get("token").toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

@Override
protected void onPostExecute(Void aVoid) {
Log.d("token", token);
//delegate.processFinish(token);
super.onPostExecute(aVoid);
}
}

我尝试在每一行之后打印到调试日志,似乎 InputStream inputStream = httpURLConnection.getInputStream(); 行从未完成,其余代码也没有执行。但是,这是在 AsyncTask 内部发生的,并且该 AsyncTask 的 onPostExecute 方法正在触发,就好像任务已经完成一样,但它似乎并没有完成。

似乎没有任何 catch block 被执行,当我检查 Android Profiler 中的网络面板时,请求说它没有传回任何东西。但是,在浏览器中访问 JSON 端点会使一切恢复正常。

希望有人知道可能是什么问题。我试图用谷歌搜索东西无济于事。让我知道是否需要更多信息。谢谢。

最佳答案

您很可能希望设置超时以确保在外部资源无法及时使用时连接失败。这些值以毫秒为单位,例如连接和读取的 5 秒超时为:

 HttpURLConnection conn = ...
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);

默认情况下,超时设置为 0,根据 setConnectTimeout() 这意味着:

A timeout of zero is interpreted as an infinite timeout.

关于java - HttpURLConnection.getInputStream() 挂起并且永远不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883305/

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