package com.dam.profesor.webservice;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button datos;
EditText latitud;
EditText longitud;
TextView resultado;
ObtenerWebService hiloconexion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datos = (Button)findViewById(R.id.datos);
latitud = (EditText)findViewById(R.id.latitud);
longitud = (EditText)findViewById(R.id.longitud);
resultado = (TextView)findViewById(R.id.resultado);
datos.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.datos:
hiloconexion = new ObtenerWebService();
hiloconexion.execute(latitud.getText().toString(),longitud.getText().toString()); // Parámetros que recibe doInBackground
break;
default:
break;
}
}
public class ObtenerWebService extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
String cadena = "http://maps.googleapis.com/maps/api/geocode/json?latlng=";
//http://maps.googleapis.com/maps/api/geocode/json?latlng=38.404593,-0.529534&sensor=false
cadena = cadena + params[0];
cadena = cadena + ",";
cadena = cadena + params[1];
cadena = cadena + "&sensor=false";
String devuelve = "";
URL url = null; // Url de donde queremos obtener información
try {
url = new URL(cadena);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Abrir la conexión
connection.setRequestProperty("User-Agent", "Mozilla/5.0" +
" (Linux; Android 1.5; es-ES) Ejemplo HTTP");
//connection.setHeader("content-type", "application/json");
int respuesta = connection.getResponseCode();
StringBuilder result = new StringBuilder();
if (respuesta == HttpURLConnection.HTTP_OK){
InputStream in = new BufferedInputStream(connection.getInputStream()); // preparo la cadena de entrada
BufferedReader reader = new BufferedReader(new InputStreamReader(in)); // la introduzco en un BufferedReader
// El siguiente proceso lo hago porque el JSONOBject necesita un String y tengo
// que tranformar el BufferedReader a String. Esto lo hago a traves de un
// StringBuilder.
String line;
while ((line = reader.readLine()) != null) {
result.append(line); // Paso toda la entrada al StringBuilder
}
//Creamos un objeto JSONObject para poder acceder a los atributos (campos) del objeto.
JSONObject respuestaJSON = new JSONObject(result.toString()); //Creo un JSONObject a partir del StringBuilder pasado a cadena
//Accedemos al vector de resultados
JSONArray resultJSON = respuestaJSON.getJSONArray("results"); // results es el nombre del campo en el JSON
//Vamos obteniendo todos los campos que nos interesen.
//En este caso obtenemos la primera dirección de los resultados.
String direccion="SIN DATOS PARA ESA LONGITUD Y LATITUD";
if (resultJSON.length()>0){
direccion = resultJSON.getJSONObject(0).getString("formatted_address"); // dentro del results pasamos a Objeto la seccion formated_address
}
devuelve = "Dirección: " + direccion; // variable de salida que mandaré al onPostExecute para que actualice la UI
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return devuelve;
}
@Override
protected void onCancelled(String aVoid) {
super.onCancelled(aVoid);
}
@Override
protected void onPostExecute(String aVoid) {
resultado.setText(aVoid);
//super.onPostExecute(aVoid);
}
@Override
protected void onPreExecute() {
resultado.setText("");
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
}
}