gpt4 book ai didi

java - 使用 AsyncTask 时无法从 HttpURLConnection.getResponseCode 接收值?

转载 作者:行者123 更新时间:2023-12-02 01:47:56 24 4
gpt4 key购买 nike

我正在尝试构建一个使用 OpenWeatherMap API 的应用程序。

我知道我无法从主线程发送 HTTP 请求。所以我改用 AsyncTask。

这是我运行 AsyncTask 的 MainActivity 类:

TextView txtView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

txtView = (TextView)findViewById(R.id.myTextID);

MyTask task = new MyTask(MainActivity.this, txtView);
task.execute();

}

下面是 MyTask 类。这是我向 URL 发送 GET 请求并尝试获取响应代码的地方。

public class MyTask extends AsyncTask<String, String, String>{

Context context;
TextView txtView;
MyTask (Context context, TextView txtView)
{
this.context = context;
this.txtView = txtView;
}

@Override
protected void onPreExecute() {
super.onPreExecute();
}

@Override
protected String doInBackground(String... voids) {

HttpURLConnection connection = null;
BufferedReader reader;
String line;
StringBuffer responseContent = new StringBuffer();
String x = "No response code";



try {
URL url = new URL("http://api.openweathermap.org/data/2.5/weather?q=london&appid=thisismyaccesstoken");

connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");
connection.setReadTimeout(10000);
connection.setConnectTimeout(10000);

x = Integer.toString(connection.getResponseCode());

}
catch(Exception e)
{
//exception handling done here
}

return x;
}

@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String s) {
txtView.setText(s);
}
}

我不想做任何花哨的加载栏的事情,所以我将 onProgressUpdate() 方法保留为空。

当我运行应用程序时,我在屏幕上看到“无响应代码”,只有当 MyTask 类无法将 GET 请求的响应代码保存到字符串 x 中时,该应用程序才会运行。

这是我第一次使用 AsyncTask。我是否做错了什么?

最佳答案

已修复。由于某种原因,每当我尝试将错误打印到控制台(在 catch block 中)时,我的应用程序就会崩溃。因此,我没有将异常打印到控制台,而是将异常转换为字符串并将该字符串保存在“x”中,如下所示:

catch(Exception e)
{
x = e.toString()
}

这样整个异常就会显示在我的应用程序的 TextView 中。显然这是一个 SecurityException,因为我的应用程序没有访问互联网的权限。所以我只是在 AndroidManifest.xml 文件中添加了以下几行:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

这解决了问题。

关于java - 使用 AsyncTask 时无法从 HttpURLConnection.getResponseCode 接收值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444916/

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