繁体   English   中英

将URL字符串传递给AsyncTask

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM