Show several markers stored in an array on the map

2

I am developing an application in Android Studio in which I connect to a server using SOAP and get something like that TCXXX,lat,long/TCXXX,lat,long I store each component in array where the latitude and longitude are double . The problem is that I can not show the points in the app.

How can I show several markers stored in an array on the map?

package com.trucka.jesus_diaz.truckalocating;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
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 org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.ArrayList;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    ArrayList<LatLng> locations;
    Button backbutton;//Boton para regresar
    ProgressDialog progressDialog;
    SharedPreferences shared;
    String cveCon;
    String user;
    String res; //declarando la variable res
    String[] responseArray; //cadena recibida del servidor separada por /
    String[] infoArray; //cadena del respoonse array separado por ,


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        backbutton= (Button) findViewById(R.id.backBtnMap); //Boton para regresar

        locations = new ArrayList();

        shared=getSharedPreferences("userInfo",MODE_PRIVATE); //obtemos acceso a sharedpreferences

        cveCon=shared.getString("cveCon","");
        user=shared.getString("user","");
        progressDialog = ProgressDialog.show(MapsActivity.this,getString(R.string.app_name),"Cargando Información....",true);  //las primeras comillas son el título y las segundas son el texto a mostrar
        try
        {
            Thread nt = new Thread()
            {
                @Override
                public void run ()
                {


                    try
                    {
                        String NAMESPACE = "http://android.trucka.com/";
                        //String URL = "http://200.76.187.148/Android/ServicioAndroid.asmx";
                        String URL = "http://192.168.10.146/ServicioAndroid/ServicioAndroid.asmx";
                        String SOAP_ACTION = "http://android.trucka.com/ObtenerLatLonTC";
                        String METHOD_NAME = "ObtenerLatLonTC";
                        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                        request.addProperty("cve_con", cveCon);
                        request.addProperty("user", user);

                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.dotNet = true;

                        envelope.setOutputSoapObject(request);
                        HttpTransportSE transporte = new HttpTransportSE(URL);

                        transporte.call(SOAP_ACTION, envelope);
                        SoapPrimitive resultado_xml = (SoapPrimitive) envelope.getResponse();
                        res = resultado_xml.toString();  // se almacena el xml recuperado de del servidor
                        responseArray = res.split("/"); //toma el la variable res y la separa por guiones y lo almacena en el arreglo responseArray
                        for(int i = 0; i < responseArray.length; i++) // armando el array de los tc
                        {
                            infoArray = responseArray[i].split(","); // separa cada una del responseArray en la información de cada arra
                            String tctittle = infoArray[0];
                            Double lat= Double.parseDouble(infoArray[1]);
                            Double lon= Double.parseDouble(infoArray[2]);
                            //LatLng truckaGuayana = new LatLng(lat,lon);
                            locations.add(new LatLng(lat, lon));
                            //mMap.addMarker(new MarkerOptions().position(truckaGuayana).title(tctittle).icon(BitmapDescriptorFactory.fromResource(R.drawable.tc_map_rsz_truck_icon_3038)));
                            //mMap.moveCamera(CameraUpdateFactory.newLatLng(truckaGuayana));
                        }
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    catch (XmlPullParserException e)
                    {
                        e.printStackTrace();
                    }
                }
            };
            nt.start();

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


        progressDialog.dismiss();

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        //Servicios de googleplay estan disponibles y actualizados
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
        if(status == ConnectionResult.SUCCESS)
        {
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        }
        else
        {
            Dialog dialog=GooglePlayServicesUtil.getErrorDialog(status,(Activity)getApplicationContext(),10);
            dialog.show();
        }

        //queda a la espera de que preisonen el boton de back
        backbutton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                Intent inten = new Intent(MapsActivity.this,MainActivity.class);
                startActivity(inten);
                finish(); //termina la Activity
            }
        });

    }





    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap)
    {
        mMap = googleMap;
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

//        for(int i = 0; i <responseArray.length; i++)
//        {
//            infoArray = responseArray[i].split(","); // separa cada una del responseArray en la información de cada array
//            // Add a marker in Sydney and move the camera
//            String tctittle = infoArray[0];
//            Float lat= Float.parseFloat(infoArray[1]);
//            Float lon= Float.parseFloat(infoArray[2]);
//            LatLng truckaGuayana = new LatLng(lat,lon);
//            mMap.addMarker(new MarkerOptions().position(truckaGuayana).title(tctittle).icon(BitmapDescriptorFactory.fromResource(R.drawable.tc_map_rsz_truck_icon_3038)));
//            //mMap.moveCamera(CameraUpdateFactory.newLatLng(truckaGuayana));
//        }
        //LatLng sydney = new LatLng(-33.852, 151.211);
        //googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        //googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        try {
            for(int i=0 ; i< responseArray.length ; i++)
            {
                Log.e("1",getString(i));
                        mMap.addMarker(new MarkerOptions().position(locations.get(i)).title("Hola"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        progressDialog.dismiss();
    }


}
    
asked by Jesús Díaz 28.07.2017 в 02:23
source

1 answer

0

If you have an arrangement of objects type LatLng :

ArrayList<LatLng> locations;

You can perform a loop (bluce) from it and create the markers:

 @Override
  public void onMapReady(GoogleMap googleMap)
   {
    mMap = googleMap;
    ...
    ...
    for (int i = 0; i < locations.size() ; i++) {
     mMap.addMarker(new MarkerOptions()
                .position(locations.get(i)));
    }
    ...
    ...
  }

With this you can create several markers on your map:

    
answered by 28.07.2017 в 02:45