allora avevo capito giusto.
Ma mi chiedo ancora una cosa.
L'errore deriva dalla disattivazione del listener.
O meglio quando tolgo la if nel on pause.
package it.alessandropiola.gestioneritirorifiuti;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
//import android.widget.Toast;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.EditText;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MyLocationOverlay;
public class AdvancedAppWidgetTestActivity extends MapActivity {
private static final String FILE_PATH = "confatto";
private final static int WAITING_PROGRESS_DIALOG_ID = 1;
/*
* Riferimento all'Handler
*
*
*/
Double geoLat ;
Double geoLng ;
private Handler myHandler;
/*
* Riferimento alla ProgressDialog
*/
LocationManager locationManager;
private ProgressDialog progressDialog;
private TextView outputView;
private EditText sendcomune;
//private final static Spinner spinners;
/*
* Tag del Log
*/
private final static String LOG_TAG = "SimpleHttpClientTestActivity";
String Calendario = null;
//Riferimento al MyLocationOverlay
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Otteniamo il riferimento al LocationManager
final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Log.w(LOG_TAG, "PUPPA:1");
// Verifichiamo se il GPS è abilitato altrimenti avvisiamo l'utente
if(!locationManager.isProviderEnabled("gps")){
// Toast.makeText(this, "GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
Log.w(LOG_TAG, "PUPPA:nogps");
}
Log.w(LOG_TAG, "PUPPA:3");
// Registriamo il LocationListener al provider GPS
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0, locationListener);
// Definiamo un SimpleAdapter
ArrayAdapter<String> adapter = createSpinnerAdapter();
// Associamo il layout del dropdown
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Otteniamo il riferimento allo Spinner
Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
// Associamo l'adapter alla Gallery
spinner.setAdapter(adapter);
outputView = (TextView) findViewById(R.id.outputhttp);
//outputView.setText(spinner.getSelectedItem().toString());
myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// Estrapoliamo il messaggiodi testo dal msg
outputView.setText(msg.obj.toString());
Creofile();
Log.i(LOG_TAG, msg.obj.toString());
}};
}
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// Aggiorna il marker della mappa
// Aggiorna la location
geoLat = getRound(location.getLatitude(), 5);//location.getLatitude()*1E6;
geoLng = getRound(location.getLongitude(), 5);
// outputView.setText(Double.toString(geoLng).toString()+ ':'+Double.toString(geoLat).toString());
}
@Override
public void onProviderDisabled(String provider) {
//Toast.makeText(AdvancedAppWidgetTestActivity.this,
// "onProviderDisabled "+provider, Toast.LENGTH_SHORT).show();
Log.w(LOG_TAG, "non enab");
}
@Override
public void onProviderEnabled(String provider) {
// Toast.makeText(AdvancedAppWidgetTestActivity.this,
// "onProviderEnabled "+provider, Toast.LENGTH_SHORT).show();
Log.w(LOG_TAG, "enble prov");
}
@Override
public void onStatusChanged(String provider, int status,Bundle extras) {
//Toast.makeText(AdvancedAppWidgetTestActivity.this,
// "onStatusChanged "+provider+" status: "+status, Toast.LENGTH_SHORT).show();
}
};
@Override
public void onPause() {
super.onPause();
Log.w(LOG_TAG, "ferma il listener");
if(locationManager != null){
Log.w(LOG_TAG, " se passo");
locationManager.removeUpdates(locationListener);
// myLocationOverlay.disableMyLocation();
}
};
/*
* Incapsula a logica di invio della richiesta Http
*/
public void SendComune(View button) {
sendcomune = (EditText) findViewById(R.id.EditComune);
final String TARGET_URL2 = "http://alessandropiola.brinkster.net/insert.asp?stringa="+sendcomune.getText().toString()+"&LAT="+Double.toString(geoLat).toString()+"&LON="+Double.toString(geoLng).toString();
Log.w(LOG_TAG, TARGET_URL2);
// Avviamo un Thread con il corrispondente codice di connessione
Thread workerThread = new Thread(new Runnable() {
@Override
public void run() {
try {
// Creiamo il riferimento al HttpClient
HttpClient httpClient = new DefaultHttpClient();
// Creiamo la HttpUriRequest relativamente al metodo GET
HttpGet request = new HttpGet();
// Impostiamo il valore dell'URI di destinazione
URI targetUri = new URI(TARGET_URL2.replace(" ", "%20"));
// URI targetUri = new URI("http://alessandropiola.brinkster.net/insert.asp?stringa="+sendcomune.getText().toString() );
request.setURI(targetUri);
// A questo punto invochiamo il server
httpClient.execute(request, myResponseHandler);
} catch (Exception e) {
showMessageOnOutput(e.getMessage());
Log.e(LOG_TAG, e.getMessage());
} finally {
dismissDialog(WAITING_PROGRESS_DIALOG_ID);
}
}
});
// Visualizziamo una Dialog di attesa
showDialog(WAITING_PROGRESS_DIALOG_ID);
// Lo avviamo
workerThread.start();
};
/*
* Incapsula a logica di invio della richiesta Http
*/
public void sendHttpRequest(View button) {
final String TARGET_URL3 = "http://alessandropiola.brinkster.net/";
Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
//select del calendario
Log.e(LOG_TAG, String.valueOf(spinner.getSelectedItemPosition()) );
if ( spinner.getSelectedItemPosition() == 0) {
Calendario = "CodevigoPD.htm";
}
if ( spinner.getSelectedItemPosition() == 1) {
Calendario = "FontanafreddaPN.htm";
}
if ( spinner.getSelectedItemPosition() == 2) {
Calendario = "OttavianoNA.htm";
}
if ( spinner.getSelectedItemPosition() == 3) {
Calendario = "ArenellaNA.htm";
}
Log.e(LOG_TAG, TARGET_URL3 );
//spinner.getSelectedItem().toString());
// Avviamo un Thread con il corrispondente codice di connessione
Thread workerThread = new Thread(new Runnable() {
@Override
public void run() {
try {
// Creiamo il riferimento al HttpClient
HttpClient httpClient = new DefaultHttpClient();
// Creiamo la HttpUriRequest relativamente al metodo GET
HttpGet request = new HttpGet();
// Impostiamo il valore dell'URI di destinazione
URI targetUri = new URI(TARGET_URL3+Calendario);
request.setURI(targetUri);
// A questo punto invochiamo il server
httpClient.execute(request, myResponseHandler);
} catch (Exception e) {
showMessageOnOutput(e.getMessage());
Log.e(LOG_TAG, e.getMessage());
} finally {
dismissDialog(WAITING_PROGRESS_DIALOG_ID);
}
}
});
// Visualizziamo una Dialog di attesa
showDialog(WAITING_PROGRESS_DIALOG_ID);
// Lo avviamo
workerThread.start();
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case WAITING_PROGRESS_DIALOG_ID:
progressDialog = new ProgressDialog(this,
ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("HTTP Connection");
progressDialog.setMessage("Connessione...");
progressDialog.setIndeterminate(true);
return progressDialog;
default:
return null;
}
};
/**
* Invia un messaggio all'Handler relativo al MainThread per la sua
* visualizzazione nella TextView di output
*
* @param message
* Messaggio da visualizzare
*/
private void showMessageOnOutput(String message) {
Message messageToSend = myHandler.obtainMessage();
messageToSend.obj = message;
myHandler.sendMessage(messageToSend);
};
private final ResponseHandler<String> myResponseHandler = new ResponseHandler<String>() {
@Override
public String handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
// Estraiamo il risultato dalla risposta. Otteniamo quindi il content
// da cui leggere le informazioni
InputStream content = response.getEntity().getContent();
byte[] buffer = new byte[1024];
int numRead = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((numRead=content.read(buffer))!=-1){
baos.write(buffer, 0, numRead);
}
// Chiudiamo lo stream
content.close();
// Otteniamo il risultato
String result = new String(baos.toByteArray());
showMessageOnOutput(result);
return result;
}
};
/*
* Metodo di utilità che permette di creare un SimpleAdapter
*/
private ArrayAdapter<String> createSpinnerAdapter() {
// Inizializziamo i dati
String[] data = getResources().getStringArray(R.array.months);
// Creiamo l'adapter
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, data);
// Lo ritorniamo
return arrayAdapter;
};
private void Creofile() {
CharSequence inputData = outputView.getText();
// Otteniamo il valore associato al mode
//long selectedId = spinnerMode.getSelectedItemId();
int mode = Context.MODE_PRIVATE;
// Resettiamo il messaggio di output
//output.setText("");
// Se diverso da null salviamo il contenuto su file
try {
FileOutputStream fos = openFileOutput(FILE_PATH, mode);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF(inputData.toString());
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
};
public static double getRound(double x, int digits){
double powerOfTen = Math.pow(10, digits);
return ((double)Math.round(x * powerOfTen) / powerOfTen);
};
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
@Override
protected void onResume() {
super.onResume();
// Registriamo il LocationListener al provider GPS
// locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
};
} se lascio if invece esce senza errore ma il gps rimane attivo.
In pratica voglio leggere la posizione prima di fare il post del comune.
Ma quando esco o mi lascia il gps attivo o mi segnala l'errore postato sopra.