[英]Passing URL string to AsyncTask
我正在尝试做一个简单的天气应用程序,该应用程序将允许用户输入他们的城市并返回天气数据。 我正在使用一个具有EditText的片段,并且正在使用一个接口将字符串传递给MainActivity,这需要在URL字符串中进行连接,这就是问题所在。未找到。 我确实检查了输入http:或https的URL。 将URL传递给我的AsyncTask的任何建议
//接口方法
@Override
public void displayCityChosen(String cityName) {
Log.i(TAG, "city name= " +cityName);
String weatherURL = "http://www.api.openweathermap.org/data/2.5/weather?q=" + cityName + "&APPID=32c831d8a6937f237acff8eef3d4a58c";
try{
String base = URLEncoder.encode(weatherURL,"UTF-8");
URL finalWeatherURL = new URL(base);
new GetWeather().execute(finalWeatherURL);
}catch (Exception e) {
Log.i(TAG, "ERROR");
}
}
private class GetWeather extends AsyncTask<URL, Void, JSONObject> {
@Override
protected JSONObject doInBackground(URL... urls) {
int statusCode = -1;
String jsonString = "";
for (URL queryURL : urls) {
try {
URLConnection conn = queryURL.openConnection();
jsonString = IOUtils.toString(conn.getInputStream());
jsonResponse = new JSONObject(jsonString);
jsonArray = jsonResponse.getJSONArray("weather");
Log.i(TAG, "Array= " + jsonArray);
break;
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
return jsonResponse;
}
}
我认为您还需要一步将URL更改为HttpURLConnection,并且我认为您使用的该URL不需要进行编码。 编码所要做的就是把斜线弄乱了。
URL url = new URL("http://blah");
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoInput(true);
if (httpURLConnection.getResponseCode() != 200) {
return null;
}
InputStream result = httpURLConnection.getInputStream();
InputStreamReader r = new InputStreamReader(result);
仅供参考,将字符串传递给asynctask并在asynctask中进行所有转换,以使应用程序响应更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.