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();
}
}