Geocoder - java.io.IOException: Unable to parse response from server

Olá Pessoal,

Estou com uma dúvida na resolução deste problema:
java.io.IOException: Unable to parse response from server

Esta ocorrendo neste linha:

List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);

//Chamada
GeocodingTask task = new GeocodingTask(this.activity);
task.execute(new Location[] { location });

//Classe
private class GeocodingTask extends
			AsyncTask<Location, Void, String> {
		Context context;

		public GeocodingTask(Context context) {
			this.context = context;
		}

		@Override
		protected String doInBackground(Location... params) {
			String result = null;

			try {
				Geocoder geocoder = new Geocoder(context, Locale.getDefault());
				Location loc = params[0];

				double latitude = loc.getLatitude();
				double longitude = loc.getLongitude();
				
				[b]List<Address> addresses = geocoder.getFromLocation(latitude,
						longitude, 1);[/b]

				if (addresses != null && addresses.size() > 0) {
					Address address = addresses.get(0);
					// result = String.format(
					// "%s, %s, %s",
					// address.getMaxAddressLineIndex() > 0 ? address
					// .getAddressLine(0) : "", address.getLocality(),
					// address.getCountryName());

					String district = address.getMaxAddressLineIndex() > 0 ? address
							.getAddressLine(0) : "";
					if (!"".equals(district)) {
						district = district.substring(
								district.lastIndexOf(",") + 2,
								district.length());
					}

					result = String.format("%s, %s", district,
							address.getLocality());
				}

			} catch (IOException e) {
				e.printStackTrace();
			}

			return result;
		}
	}

Alguém saberia o que posso fazer para não ocorrer esse erro?
Detalhe, a primeira vez que é executado ocorre essa exception, mas quando retorno a executar a função ele retorna o resultado.

Obrigado,

eu passei por um problema parecido recentemente e no meu caso era o gps e/ou a internet que demoravam a iniciar seus serviços eu simplesmente coloquei um delay para dar tempo de iniciar certinho o serviço e funcionou.

Olá danilorangelmg,

Vou colocar um Handler.postDelay… vamos ver se resolve, de forma mais técnica.
Mas estou buscando um outra forma de resolver elegantimente…

Todo caso Danilo, obrigado pela dica !!
Logo mais volto a postar o feedback do handler.postdelay e também se der certo eu posto o código.

Obrigado,

Olá Pessoal

Então achei uma solução um pouco menos radical do delay, foi fazer números de tentativas, 3 para mim funcionou legal.
Haja visto que se for mais do que isso vai ficar lento a resposta para o usuário.

Segue o trecho de código:

//Codigo GeocodingTask

@Override
		protected String doInBackground(Location... params) {
			String result = null;
			int responseCount = 0;
			do {
				try {
					Geocoder geocoder = new Geocoder(context,
							Locale.getDefault());
					Location loc = params[0];

					double latitude = loc.getLatitude();
					double longitude = loc.getLongitude();

					List<Address> addresses = geocoder.getFromLocation(
							latitude, longitude, 1);

					if (addresses != null && addresses.size() > 0) {
						Address address = addresses.get(0);
						// result = String.format(
						// "%s, %s, %s",
						// address.getMaxAddressLineIndex() > 0 ? address
						// .getAddressLine(0) : "", address.getLocality(),
						// address.getCountryName());

						String district = address.getMaxAddressLineIndex() > 0 ? address
								.getAddressLine(0) : "";
						if (!"".equals(district)) {
							district = district.substring(
									district.lastIndexOf(",") + 2,
									district.length());
						}

						result = String.format("%s, %s", district,
								address.getLocality());
					}

				} catch (IOException e) {
					e.printStackTrace();

				} finally {
					responseCount++;
				}

			} while (result == null || responseCount <= 3);

			return result;
		}

Espero ter ajudado alguém

Ô se ajudou! Vou usar sua solução.
Obrigado por salvar meu tempo Thiago!

[code]@Override
protected String doInBackground(Location… params) {
Geocoder geocoder = new Geocoder(mContext, Locale.getDefault());
Location loc = params[0];
List addresses = null;

		//Tenta ate 3 vezes. Geralmente vai na primeira. Quando muito na segunda.
		for (int i = 0; 2 > i; i++) {
			try {
				addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);
				
			} catch (IOException e) {
				continue;
			}
			if(i >= 1)
				Log.w("Loop de tentativas pra pegar enderecos", ""+i);
			break;
		}
		if (addresses != null && addresses.size() > 0) {
			Address address = addresses.get(0);

			cidade = address.getAdminArea();
			estado = address.getLocality();
			pais = address.

//(…)
}[/code]

.

Bom dia danilorangelmg ,

De que maneira exatamente vc adicionou o delay para esperar até que o serviços necessários tenham sidos iniciados?
Tem como vc postar o trecho do código?

Estou tendo esse mesmo problema já a algum tempo.

Grato, Levi.