Buongiorno a tutti, chiedo aiuto a voi perchè il mio software presenta un bug dal quale non sto riuscendo a venirne a capo.
L'errore che ho è un errore di runtime, ed il logcat è il seguente
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()Questo succede quando io richiamo una funzione che mi deve creare una progressdialog a video, il cui codice è questo
private void getProgressDialogGps() {
progressDialog = new ProgressDialog(FiestaActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(getResources().getString(R.string.gpsDialog));
progressDialog.setCancelable(false);
if (!runnedSplash) {
Handler showProgressDialog = new Handler();
showProgressDialog.postDelayed(new Runnable() {
public void run() {
if (!getPosition)
progressDialog.show();
}
}, SPLASHTIME);
} else {
progressDialog.show();
La cosa che mi lascia perplesso è che l'errore non mi viene dato sempre ma solo quando lancio la funzione per aggiornare la posizione gps. Cioè nella mia applicazione ho definito un lasso di tempo (10 minuti) oltre il quale l'app deve aggiornare la sua posizione. Per fare questo uso la funzione initGps()
private void initGps() {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = lm.getBestProvider(criteria, true);
if (bestProvider != null) {
getProgressDialogGps();
GpsListener gpsProviderListener = new GpsListener();
lm.requestLocationUpdates(bestProvider, 60000, 20, gpsProviderListener);
new GpsTimeout().execute();
} else {
fixTime = System.currentTimeMillis();
getAlertDialogForGeolocation();
}
}questo è il relativo listener
private class GpsListener implements LocationListener {
public void onLocationChanged(Location location) {
getPosition = true;
if (progressDialog != null) progressDialog.dismiss();
myPositionLat = location.getLatitude();
myPositionLng = location.getLongitude();
String lat = String.valueOf(myPositionLat);
String lon = String.valueOf(myPositionLng);
fixTime = System.currentTimeMillis();
getProgressDialogLoadingLista();
new PopolaLista(lat, lon).execute();
lm.removeUpdates(this);
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}Tutta questa giostra viene lanciata da un item dell'optionMenu, che controlla il tempo dell'ultimo fix del gps e se è più vecchio di 10 minuti rilancia l'initGps(). In questo caso ho quell'errore di runtime sulla riga 1 della funzione getProgressDialogGps().
Scusate se mi sono dilungato molto, spero mi possiate aiutare perchè io non ne sto venendo veramente a capo
