Good morning,
I'm having some problems implementing a small app to get the weather coming from OpenWeatherMap responses, however I'm having trouble implementing it.
Main Activity:
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static final String APP_ID = "api_id";
private static final int PERMISSION_ACCESS_COARSE_LOCATION = 1;
private GoogleApiClient googleApiClient;
private TextView textView;
private TextView textView_humidity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.ACCESS_COARSE_LOCATION },
PERMISSION_ACCESS_COARSE_LOCATION);
}
googleApiClient = new GoogleApiClient.Builder(this, this, this).addApi(LocationServices.API).build();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case PERMISSION_ACCESS_COARSE_LOCATION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// All good!
} else {
Toast.makeText(this, "Need your location!", Toast.LENGTH_SHORT).show();
}
break;
}
}
@Override
protected void onStart() {
super.onStart();
if (googleApiClient != null) {
googleApiClient.connect();
}
}
@Override
protected void onStop() {
googleApiClient.disconnect();
super.onStop();
}
@Override
public void onConnected(Bundle bundle) {
Log.i(MainActivity.class.getSimpleName(), "Connected to Google Play Services!");
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
double lat = lastLocation.getLatitude();
double lon = lastLocation.getLongitude();
String units = "metric";
String url = String.format("http://api.openweathermap.org/data/2.5/weather?lat=%f&lon=%f&units=%s&appid=%s",
lat, lon, units, APP_ID);
new GetWeatherTask(textView).execute(url);
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(MainActivity.class.getSimpleName(), "Can't connect to Google Play Services!");
}
private class GetWeatherTask extends AsyncTask<Meteo, Void, Meteo> {
private TextView textView;
private TextView textView_humidity;
public GetWeatherTask(TextView textView) {
this.textView = textView;
}
@Override
protected Meteo doInBackground(Meteo... params) {
Meteo meteo = new Meteo();
String weather = "UNDEFINED";
try {
URL url = new URL(params[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream stream = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
StringBuilder builder = new StringBuilder();
String inputString;
while ((inputString = bufferedReader.readLine()) != null) {
builder.append(inputString);
}
JSONObject topLevel = new JSONObject(builder.toString());
JSONObject main = topLevel.getJSONObject("main");
meteo.temperatura = String.valueOf(main.getDouble("temp"));
meteo.humidade = String.valueOf(main.getDouble("humidity"));
urlConnection.disconnect();
} catch (IOException | JSONException e) {
e.printStackTrace();
}
return meteo;
}
@Override
protected void onPostExecute(Meteo meteo) {
textView.setText("Current Weather: " + meteo.temperatura + " ºC");
textView.setText("Current Humidity: " + meteo.humidade + " ºC");
}
}
}
Meteo Class:
public class Meteo {
public String temperatura;
public String humidade;
public String vento;
public Meteo()
{
temperatura = "";
humidade = "";
vento = "";
}
public Meteo(String tEmperatura, String hUmidade, String vEnto)
{
temperatura = tEmperatura;
humidade = hUmidade;
vento = vEnto;
}
public String getTemperatura(){
return temperatura;
}
public String getHumidade (){
return humidade;
}
public String getVento()
{
return vento;
}
}
Basically my problem is in the URL.
That is, here:
new GetWeatherTask (textView) .execute (url);
URL url = new URL (params [0]);
I'm still not very familiar with these elements either url, or asynctasks could they help me to solve this problem?
Greetings