@Lucas_Marques1 escreveu:
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> {
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()); // ... } }; }
}
Mensagens: 1
Participantes: 1