Estou desenvolvendo meu tcc, onde insiro estabelecimentos de minha base de dados no mapa, e estou me baseando nos cursos do Alura para fazer essa pesquisa através do Geocoder que me trás a Latitude e Longitude de um endereço. Porém estou tendo um problema, esse Geocoder ao fazer o método getFromLocationName() está sempre me retornando nulo para todos os endereço. Antes esta parte estava ok, funcionando normal, não mexi em nada e começou a dar esse problema comigo. Estou quebrando a cabeça e já pesquisei muito para tentar resolver e nada. Segue código:
package br.com.alura.searchdrink.task;
import android.app.ProgressDialog;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import br.com.alura.searchdrink.R;
import br.com.alura.searchdrink.fragment.MapaFragment;
import br.com.alura.searchdrink.modelo.Bar;
public class TarefaDownloadLocalizacaoBares extends AsyncTask<DatabaseReference, Void, List<Bar>> {
private final Context context;
private List<Estabelecimento> estabelecimentos;
private ProgressDialog progresso;
public TarefaDownloadLocalizacaoBares(Context context){
this.context = context;
}
@Override
protected void onPreExecute() {
Log.i("AsyncTask", "Exibindo ProgressDialog na tela Thread: " + Thread.currentThread().getName());
progresso = ProgressDialog.show(context, "Por favor aguarde ...",
"Baixando Estabelecimentos...");
}
@Override
protected List<Bar> doInBackground(DatabaseReference... dbs) {
estabelecimentos = new ArrayList<>();
ValueEventListener postListener = pegaEstabelecimentos();
dbs[0].addValueEventListener(postListener);
synchronized (estabelecimentos){
try {
estabelecimentos.wait();
} catch (InterruptedException e) {e.printStackTrace();}
}
return estabelecimentos;
}
@Override
protected void onPostExecute(List<Estabelecimento> e) {
if (e.size() != 0) {
for (Estabelecimento estabelecimento : e) {
LatLng coordenada = pegaCoordenadaDoEndereco(estabelecimento.getEndereco());
if (coordenada != null) {
MarkerOptions marcador = new MarkerOptions();
marcador.position(coordenada);
marcador.title(estabelecimento.getNome());
marcador.snippet(String.valueOf(estabelecimento.getTelefone()));
marcador.icon(BitmapDescriptorFactory.fromResource(R.drawable.copocheio_mapa));
MapaFragment.mapa.addMarker(marcador);
}
}
}
progresso.dismiss();
}
private LatLng pegaCoordenadaDoEndereco(String endereco) {
try{
Geocoder geocoder = new Geocoder(context);
List<Address> resultados = geocoder.getFromLocationName(endereco, 1);
if(!resultados.isEmpty()){
LatLng posicao = new LatLng(resultados.get(0).getLatitude(),
resultados.get(0).getLongitude());
return posicao;
}
}catch(IOException e){
e.printStackTrace();
}
return null;
}
@NonNull
private ValueEventListener pegaEstabelecimentos() {
return new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
synchronized (estabelecimentos) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Map<String, Object> map = (HashMap<String, Object>) snapshot.getValue();
String nome = String.valueOf(map.get("nome"));
String endereco = String.valueOf(map.get("endereco"));
String telefone = String.valueOf(map.get("telefone"));
String site = String.valueOf(map.get("site"));
String email = String.valueOf(map.get("email"));
String tipoBar = String.valueOf(map.get("tipoBar"));
if (endereco != null) {
Estabelecimento estabelecimento = new Estabelecimento(nome, endereco, telefone, site, email, tipoBar);
estabelecimentos.add(estabelecimento);
}
}
estabelecimentos.notifyAll();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w("AsyncTask", "loadPost:onCancelled", databaseError.toException());
// ...
}
};
}
}
Quem puder me ajudar agradeço muito, estou com esse projeto atrasado já