Как я могу отображать данные openweathermap отдельно в android?
Мое приложение может отображать текущую информацию о погоде. Однако это не то, чего я хочу, потому что он не гибкий. В настоящее время приложение отображает все в виде одной строки данных. Но я хочу, чтобы они были разделены так, чтобы я мог отображать и использовать их по своему усмотрению. Я хочу сказать, что хотел бы отобразить долготу и широту в одном текстовом представлении. Скорость ветра в другом текстовом представлении, температура в другом текстовом представлении и описание в другом текстовом представлении. Это потому, что я хочу отобразить место с его текущей температурой на карте Google с маркерами после нажатия кнопки.
Может ли кто-нибудь предложить мне решение, чтобы выполнить эту работу? Я использую openweathermap.org API.
Что я уже пробовал:
<b>here is my activity code</b> <pre> public class MainActivity extends Activity { Button btnSubmitCity, btnMap; EditText editCityText; TextView weather_description, current_temp, wind_speed, textViewResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editCityText = (EditText) findViewById(R.id.editCity); btnMap =(Button) findViewById(R.id.mapButton); btnSubmitCity = (Button) findViewById(R.id.submitCity); weather_description = (TextView) findViewById(R.id.weatherDescription); current_temp = (TextView) findViewById(R.id.currentTemp); wind_speed = (TextView) findViewById(R.id.windSpeed); //textViewResult = (TextView)findViewById(R.id.result); textViewResult = (TextView)findViewById(R.id.result); btnMap.setVisibility(View.INVISIBLE); btnMap.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); btnSubmitCity.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //editCityText.getText().toString(); //HttpGetTask String cityString = editCityText.getText().toString(); if(TextUtils.isEmpty(cityString)) { Toast.makeText(MainActivity.this, "Enter a place", Toast.LENGTH_LONG).show(); return; } else{ new HttpGetTask(cityString, weather_description).execute(cityString); btnMap.setVisibility(View.VISIBLE); } //String cityString = city.getText().toString(); //new HttpGetTask().execute(); /* new HttpGetTask( editCityText.getText().toString(), textViewResult).execute(); */ } }); } private class HttpGetTask extends AsyncTask<String, Void, String> { final String FORECAST_BASE_URL = "http://api.openweathermap.org/data/2.5/weather?"; private static final String TAG = "HttpGetTask"; String cityName; TextView tvResult; HttpGetTask(String cityName, TextView tvResult){ this.cityName = cityName; this.tvResult = tvResult; } @Override protected String doInBackground(String... params){ InputStream in = null; HttpURLConnection httpUrlConnection = null; String result = ""; try { Uri builtUri = Uri.parse(FORECAST_BASE_URL).buildUpon() .appendQueryParameter("q", cityName+",us") // city .appendQueryParameter("mode", "json") // json format as result .appendQueryParameter("units", "imperial") // metric unit .appendQueryParameter("APPID", "eplace this line with your API ID") .build(); URL url = new URL(builtUri.toString()); httpUrlConnection = (HttpURLConnection) url.openConnection(); in = new BufferedInputStream( httpUrlConnection.getInputStream()); String data = readStream(in); result = edu.uco.rawal.p6rabina.JSONWeatherData.getData(data); } catch (MalformedURLException exception) { Log.e(TAG, "MalformedURLException"); } catch (IOException exception) { Log.e(TAG, "IOException"); } catch (JSONException e) { Log.e(TAG, e.getMessage(), e); e.printStackTrace(); } finally { if (null != httpUrlConnection) { httpUrlConnection.disconnect(); } if (in != null) { try { in.close(); } catch (final IOException e) { Log.e(TAG, "Error closing stream", e); } } } return result; } @Override protected void onPostExecute(String result) { if (result == null || result == "") { Toast.makeText(MainActivity.this, "Invalid weather data. Possibly a wrong query", Toast.LENGTH_SHORT).show(); return; } else { //btnMap.setVisibility(View.VISIBLE); tvResult.setText(result); } } private String readStream(InputStream in) { BufferedReader reader = null; StringBuffer data = new StringBuffer(""); try { reader = new BufferedReader(new InputStreamReader(in)); String line ; while ((line = reader.readLine()) != null) { data.append(line); } } catch (IOException e) { Log.e(TAG, "IOException"); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return data.toString(); } } } </pre> and here is my JSONWeatherData class <pre> public class JSONWeatherData { public static String getData(String weatherJson) throws JSONException { String jsonResult = ""; try { JSONObject JsonObject = new JSONObject(weatherJson); String cod = jsonHelperGetString(JsonObject, "cod"); if(cod != null) { if (cod.equals("200")) { jsonResult += jsonHelperGetString(JsonObject, "name") + "\n"; JSONObject sys = jsonHelperGetJSONObject(JsonObject, "sys"); if (sys != null) { jsonResult += jsonHelperGetString(sys, "country") + "\n"; } jsonResult += "\n"; JSONObject coord = jsonHelperGetJSONObject(JsonObject, "coord"); if(coord != null){ String lon = jsonHelperGetString(coord, "lon"); String lat = jsonHelperGetString(coord, "lat"); jsonResult += "Lon: " + lon + "\n"; jsonResult += "Lat: " + lat + "\n"; } jsonResult += "\n"; JSONArray weather = jsonHelperGetJSONArray(JsonObject, "weather"); if(weather != null){ for(int i=0; i<weather.length(); i++){ JSONObject thisWeather = weather.getJSONObject(i); jsonResult += "Weather " + i + ":\n"; jsonResult += jsonHelperGetString(thisWeather, "main") + "\n"; jsonResult += jsonHelperGetString(thisWeather, "description") + "\n"; jsonResult += "\n"; } } JSONObject main = jsonHelperGetJSONObject(JsonObject, "main"); if(main != null){ jsonResult += "temp: " + jsonHelperGetString(main, "temp") + "\n"; jsonResult += "\n"; } JSONObject wind = jsonHelperGetJSONObject(JsonObject, "wind"); if(wind != null){ jsonResult += "Wind Speed: " + jsonHelperGetString(wind, "speed") + "\n"; jsonResult += "\n"; } } else if(cod.equals("404")){ String message = jsonHelperGetString(JsonObject, "message"); jsonResult += "cod 404: " + message; } } else{ jsonResult += "cod == null\n"; } } catch (JSONException e) { e.printStackTrace(); Log.e(TAG, e.getMessage(), e); jsonResult += e.getMessage(); } return jsonResult; } private static String jsonHelperGetString(JSONObject obj, String k){ String v = null; try { v = obj.getString(k); } catch (JSONException e) { e.printStackTrace(); } return v; } private static JSONObject jsonHelperGetJSONObject(JSONObject obj, String k){ JSONObject o = null; try { o = obj.getJSONObject(k); } catch (JSONException e) { e.printStackTrace(); } return o; } private static JSONArray jsonHelperGetJSONArray(JSONObject obj, String k){ JSONArray a = null; try { a = obj.getJSONArray(k); } catch (JSONException e) { e.printStackTrace(); } return a; } } </pre>
Richard MacCutchan
Разделите детали на отдельные элементы и отобразите их так, как вы хотите. В чем именно заключается проблема?