본문 바로가기
실전 임베디드

안드로이드 HttpClient 연습을 위한 샘플 소스 실전 임베디드 2016. 8. 25. 17:17

by BABEL-II 2019. 9. 23.

public class MainActivity extends AppCompatActivity {

 

    TextView tvWeatherJson;

    Button  btnFetchWeather;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tvWeatherJson = (TextView) findViewById(R.id.tv_weather_json);

        btnFetchWeather = (Button) findViewById(R.id.btn_fetch_weather);

        btnFetchWeather.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                new FetchWeatherData().execute();

            }

        });

    }

 

 

    private class FetchWeatherData extends AsyncTask<Void, Void, String> {

 

        @Override

        protected String doInBackground(Void... params) {

            // These two need to be declared outside the try/catch

            // so that they can be closed in the finally block.

            HttpURLConnection urlConnection = null;

            BufferedReader reader = null;

 

            // Will contain the raw JSON response as a string.

            String forecastJsonStr = null;

 

            try {

                // Construct the URL for the OpenWeatherMap query

                // Possible parameters are avaiable at OWM's forecast API page, at

                // http://openweathermap.org/API#forecast

                URL url = new URL("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7&appid=2de143494c0b295cca9337e1e96b00e0");

 

                // Create the request to OpenWeatherMap, and open the connection

                urlConnection = (HttpURLConnection) url.openConnection();

                urlConnection.setRequestMethod("GET");

                urlConnection.connect();

 

                // Read the input stream into a String

                InputStream inputStream = urlConnection.getInputStream();

                StringBuffer buffer = new StringBuffer();

                if (inputStream == null) {

                    // Nothing to do.

                    return null;

                }

                reader = new BufferedReader(new InputStreamReader(inputStream));

 

                String line;

                while ((line = reader.readLine()) != null) {

                    // Since it's JSON, adding a newline isn't necessary (it won't affect parsing)

                    // But it does make debugging a *lot* easier if you print out the completed

                    // buffer for debugging.

                    buffer.append(line + "\n");

                }

 

                if (buffer.length() == 0) {

                    // Stream was empty.  No point in parsing.

                    return null;

                }

                forecastJsonStr = buffer.toString();

                return forecastJsonStr;

            } catch (IOException e) {

                Log.e("PlaceholderFragment", "Error ", e);

                // If the code didn't successfully get the weather data, there's no point in attemping

                // to parse it.

                return null;

            } finally{

                if (urlConnection != null) {

                    urlConnection.disconnect();

                }

                if (reader != null) {

                    try {

                        reader.close();

                    } catch (final IOException e) {

                        Log.e("PlaceholderFragment", "Error closing stream", e);

                    }

                }

            }

        }

 

        @Override

        protected void onPostExecute(String s) {

            super.onPostExecute(s);

            tvWeatherJson.setText(s);

            Log.i("json", s);

        }

    }

}