Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Apenas uma marcação no mapa através do googleMap.addMarker()

Olá tutor tudo bem? Estou tendo complicações, como o próprio título diz, eu não estou conseguindo marcar todas as localizações dos alunos no mapa :(. Ele apenas faz a marcação do primeiro aluno (quando eu mudo a ordem no banco o marcador também muda de posição). Deixo abaixo meu código e depois colocarei o log..

public class MapaFragment extends SupportMapFragment implements OnMapReadyCallback {

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        LatLng posicaoDaEscola = pegaCoordenadaDoEndereco("Rua Vergueiro 3185, Vila Marina, Sao Paulo");
        if(posicaoDaEscola!=null) {
            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(posicaoDaEscola,17);
            googleMap.moveCamera(update);
        }

        AlunoDAO alunoDAO = new AlunoDAO(getContext());
        List<MarkerOptions> marcadores = new ArrayList<MarkerOptions>();
        for (Aluno aluno : alunoDAO.buscaAlunos()) {
            LatLng coordenada = pegaCoordenadaDoEndereco(aluno.getEndereco());
            if (coordenada != null) {
                MarkerOptions marcador = new MarkerOptions();
                marcador.position(coordenada);
                marcador.title(aluno.getNome());
                marcador.snippet(String.valueOf(aluno.getNota()));
                marcadores.add(marcador);

                System.out.println("OLA, EU TENHO A COORDENADA DO ALUNO : "+aluno.getNome()+" E SEU VALOR EH: "+coordenada);

            }
        }

        alunoDAO.close();

        for(MarkerOptions marcador:marcadores) {
            googleMap.addMarker(marcador);
        }

        System.out.println("APESAR DE MEUS ESFORÇOS FACO APENAS A MARCACAO DO PRIMEIRO ALUNO NO SEU MAPA :(");
    }

    private LatLng pegaCoordenadaDoEndereco(String endereco) {
        try {
            Geocoder geocoder = new Geocoder(getContext());
            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;
    }
}
3 respostas

Não consegui inserir um print com a situação no mapa.. mas deixo aqui meu log:

07-17 19:46:37.402 6727-6732/br.com.example.admin.agenda I/zygote64: Compiler allocated 8MB to compile void android.widget.TextView.<init>(android.content.Context, android.util.AttributeSet, int, int)
07-17 19:46:37.967 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:38.527 6727-6727/br.com.example.admin.agenda I/Choreographer: Skipped 37 frames!  The application may be doing too much work on its main thread.
07-17 19:46:38.591 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:38.636 6727-6727/br.com.example.admin.agenda W/View: dispatchProvideAutofillStructure(): not laid out, ignoring
07-17 19:46:38.752 6727-6727/br.com.example.admin.agenda I/AssistStructure: Flattened final assist data: 3764 bytes, containing 1 windows, 13 views
07-17 19:46:38.918 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:39.048 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:41.050 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:41.095 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:44.539 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:44.928 6727-6765/br.com.example.admin.agenda I/chatty: uid=10085(u0_a85) RenderThread identical 4 lines
07-17 19:46:45.023 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:45.126 6727-6732/br.com.example.admin.agenda I/zygote64: Compiler allocated 6MB to compile void android.view.ViewRootImpl.performTraversals()
07-17 19:46:46.412 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:46.506 6727-6765/br.com.example.admin.agenda I/chatty: uid=10085(u0_a85) RenderThread identical 1 line
07-17 19:46:46.767 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:54.929 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:56.053 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:56.128 6727-6727/br.com.example.admin.agenda I/Choreographer: Skipped 54 frames!  The application may be doing too much work on its main thread.
07-17 19:46:56.190 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:56.508 6727-6738/br.com.example.admin.agenda I/zygote64: NativeAllocBackground concurrent copying GC freed 33370(1508KB) AllocSpace objects, 3(60KB) LOS objects, 49% free, 4MB/8MB, paused 28.600ms total 705.444ms
07-17 19:46:56.728 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:56.797 6727-6765/br.com.example.admin.agenda I/chatty: uid=10085(u0_a85) RenderThread identical 1 line
07-17 19:46:57.060 6727-6765/br.com.example.admin.agenda D/EGL_emulation: eglMakeCurrent: 0x7b292b46eac0: ver 2 0 (tinfo 0x7b2937f1bd20)
07-17 19:46:57.159 6727-6738/br.com.example.admin.agenda I/zygote64: NativeAllocBackground concurrent copying GC freed 5384(296KB) AllocSpace objects, 3(60KB) LOS objects, 49% free, 3MB/7MB, paused 5.026ms total 120.951ms
07-17 19:46:57.928 6727-6732/br.com.example.admin.agenda I/zygote64: Do full code cache collection, code=504KB, data=359KB
07-17 19:46:57.937 6727-6732/br.com.example.admin.agenda I/zygote64: After code cache collection, code=360KB, data=206KB
07-17 19:46:58.032 6727-6727/br.com.example.admin.agenda I/Google Maps Android API: Google Play services package version: 12521025
07-17 19:47:00.773 6727-6727/br.com.example.admin.agenda I/System.out: OLA, EU TENHO A COORDENADA DO ALUNO : lucas E SEU VALOR EH: lat/lng: (-22.808451599999998,-43.4335502)
07-17 19:47:01.439 6727-6727/br.com.example.admin.agenda I/System.out: OLA, EU TENHO A COORDENADA DO ALUNO : luiz E SEU VALOR EH: lat/lng: (41.4853545,-7.180871100000001)
07-17 19:47:01.444 6727-6727/br.com.example.admin.agenda I/System.out: APESAR DE MEUS ESFORÇOS FACO APENAS A MARCACAO DO PRIMEIRO ALUNO NO SEU MAPA :(
07-17 19:47:01.452 6727-6727/br.com.example.admin.agenda I/Choreographer: Skipped 164 frames!  The application may be doing too much work on its main thread.

Olá novamente, descobri que meu outro marcador foi para outro país, neste caso Portugal. Existe alguma forma de priorizar para que venham ruas apenas de meu país na busca?

solução!

Oi Lucas, tudo bem ?

Então você solucionou o problema ?

Em tese não, pois como ele vai pegar apenas o primeiro resultado, pega o que tiver mais chance de estar certo.

O que pode fazer é trabalhar com uma lista maior e dela pegar algum valor que faça mais sentido pra ti, verificando a distancia em questão da latitude e longitude.

Contudo nem sempre o resultado esperado será o apresentado.