Return de um método [RESOLVIDO]

Pessoal, boa tarde.

Estou tentado criar um método que retorne a latitude que já está previamente em um ArrayList informando um int como posição que eu desejo recuperar.
Meu problema é que no retorno fica o valor 0, de quando ela foi declarada e não o valor que ela recebe dentro do for.

Deve ser algo simples, mas como sou iniciante, sozinho não consegui resolver. Podem me ajudar?

	protected int retLat(int index) {
		
		XMLGettersSetters data = null;
		data = new XMLGettersSetters();
		data.getStart_location_lat();//array com as latitudes
		int start_location_lat1E6=0;		 
	
		for (int i = 0; i < data.getStart_location_lat().size();i++) {
			
			//pega a lat do endereço inicial
			double start_location_latd=0;
			if(i==data.getStart_location_lat().size()-4)
			start_location_latd = Double.parseDouble(data.getStart_location_lat().get(i));
			[color=red]start_location_lat1E6[/color][size=18] [/size]= (int)(start_location_latd*1E6);
		
			
		}
		return  start_location_lat1E6;
		
	}

Desde já agradeço a ajuda.

cria a variável start_location_lat1E6 e a inicializa fora do for.

Mas a variável já foi inicializada fora do for, conforme abaixo em vermelho.

protected int retLat(int index) {

XMLGettersSetters data = null;
data = new XMLGettersSetters();
data.getStart_location_lat();//array com as latitudes
[color=red]int start_location_lat1E6=0; [/color]

for (int i = 0; i < data.getStart_location_lat().size();i++) {

//pega a lat do endereço inicial
double start_location_latd=0;
if(i==data.getStart_location_lat().size()-4)
start_location_latd = Double.parseDouble(data.getStart_location_lat().get(i));
[color=red]start_location_lat1E6[/color] = (int)(start_location_latd*1E6);

}
return start_location_lat1E6;

}

Olá
O index não é o indice do array? Você nem precisa do loop for, pega o item diretamente.
Outra coisa, o seu if não deveria usar { } ?

Cristiano eu alterei o código conforme a sua sugestão, ficou assim:

Este método preenche o ArrayList

public void setStart_location_lat(String start_location_lat) {
this.start_location_lat.add(start_location_lat);
Log.i(“This is the start_location_lat:”, start_location_lat);

}

protected int retLatIni() {

		XMLGettersSetters data = null;
		data = new XMLGettersSetters();
		data.getStart_location_lat();//array com as latitudes
		
	
		int index = data.getStart_location_lat().size()-4;
		double start_location_lat = Double.parseDouble(data.getStart_location_lat().get(index));
		int start_location_lat1E6 = (int)(start_location_lat*1E6);
		
		return  start_location_lat1E6;
		
	}

Retorno está funcionando, mas aparece o erro quando eu tento pegar o item pelo índice dele diretamente.

java.lang.ArrayIndexOutOfBoundsException
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0

Com o for "for (int i = 0; i < data.getStart_location_lat().size(); i++) " eu consigo recuperar a posição,
mas diretamente aparece como se o ArrayList estivesse vazio. O problema é que com o for eu não consigo passar os valores para o método point = new GeoPoint( int,int);.

Sabe uma forma de pegar o valor diretamente ou utilizando o for, mas que eu consiga utilizar o valor no método?

1.Quando você faz: int index = data.getStart_location_lat().size()-4;
Precisa verificar se index não ficou menor que zero. Porque -4?

2.O erro ocorreu com qual código?

3.Explica o que você tem de dados e o que pretende obter.
O seu arrayList tem as latitudes, mas se você quer um geoPoint onde estão as longitudes?

1.Quando você faz: int index = data.getStart_location_lat().size()-4;
Precisa verificar se index não ficou menor que zero. Porque -4?

O ArrayList que eu tenho é um retorno da uma pagina xml lida pelo SAX(analisador xml) abaixo segue o método que preenche o Arraylist após ler a página xml:

public void setStart_location_lat(String start_location_lat) {
this.start_location_lat.add(start_location_lat);
Log.i(“This is the start_location_lat:”, start_location_lat);

}

O tamanho da ArrayList é variável, mas sempre fica à 4 posições do fim da ArrayList, por isso eu uso o tamanho total do array menos 4 aí pega a posição que eu preciso.

2.O erro ocorreu com qual código?
Neste código abaixo o informa que o Arraylist está vazio, mas eu imprimo um Log e vejo o que está no Array e não consigo acessar diretamente colocando o índice, se eu uso um for eu consigo percorrer os valores daí preciso de um if para saber quando chegou no indice que eu preciso, mas desta forma eu não consigo usar os valores que estão dentro do for no método point(int,int) porque aí o ele fica dentro do if e então restante do código não da erro mas também não mostra nada no mapa como se eu não tivesse informado os pontos.

protected int retLatIni() {

XMLGettersSetters data = null;
data = new XMLGettersSetters();
data.getStart_location_lat();//array com as latitudes

int index = data.getStart_location_lat().size()-4;
double start_location_lat = Double.parseDouble(data.getStart_location_lat().get(index));
int start_location_lat1E6 = (int)(start_location_lat*1E6);

return start_location_lat1E6;

}

Eu preciso do retorno do método acima para usra no método abaixo:
point = new GeoPoint( retLatIni(),retLngIni());

3.Explica o que você tem de dados e o que pretende obter.
O seu arrayList tem as latitudes, mas se você quer um geoPoint onde estão as longitudes?

Eu tenho um array para latitudes e um para longitudes e preciso utilizar no método point(int,int), para mostar no mapa, mas tenho que obter o valor que fica em tamanho do arrray menos 4.

:stuck_out_tongue:

Ok. Pode postar a classe XMLGettersSetters ?

Sim, aqui está a classe XMLGettersSetters

package sax.teste.xml;

import java.util.ArrayList;

import android.os.Bundle;
import android.util.Log;

public class XMLGettersSetters {
XMLGettersSetters data=null;

public ArrayList<String> start_location_lat = new ArrayList<String>();
public ArrayList<String> start_location_lng= new ArrayList<String>();
public ArrayList<String> start_location_distini=new ArrayList<String>();
public ArrayList<String> start_location_distfin=new ArrayList<String>();
public ArrayList<String> start_location_dur=new ArrayList<String>();
   

public ArrayList<String> getStart_location_lat() {
    return start_location_lat;
}

public void setStart_location_lat(String start_location_lat) {
	this.start_location_lat.add(start_location_lat);
    Log.i("This is the start_location_lat:", start_location_lat);
    //Log.i("SIZE:", Integer.toString(getStart_location_lat().size()));
}

public ArrayList<String> getStart_location_lng() {
    return start_location_lng;
}

public void setStart_location_lng(String start_location_lng) {
	this.start_location_lng.add(start_location_lng);
    Log.i("This is the start_location_lng:", start_location_lng);
}

public ArrayList<String> getStart_location_distini() {
    
	return start_location_distini;
}

public void setStart_location_distini(String start_location_distini) {
	this.start_location_distini.add(start_location_distini);
    Log.i("This is the start_location_distini:", start_location_distini);
}
public ArrayList<String> getStart_location_distfin() {
    
	return start_location_distfin;
}

public void setStart_location_distfin(String start_location_distfin) {
	this.start_location_distfin.add(start_location_distfin);
    Log.i("This is the start_location_dist:", start_location_distfin);
}	

public ArrayList getStart_location_dur() {

	return start_location_dur;
}

public void setStart_location_dur(String start_location_dur) {
	this.start_location_dur.add(start_location_dur);
    Log.i("This is the start_location_dur:", start_location_dur);
}

}

Olá

data = new XMLGettersSetters(); data.getStart_location_lat();//array com as latitudes

quando você fez "data = new XMLGettersSetters(); " foi criado um novo objeto vazio.

Você precisa usar o objeto já populado.

Oi, mas com o for "for (int i = 0; i < data.getStart_location_lat().size(); i++) " eu consigo recuperar a posição,

Nesse caso qual o valor do retorno?

O serviço utilizado é do google.
Se você colar o endereço abaixo no navegador ele retorna a pagina xml com todas as latitudes e longitudes do endereço inicial ao final.

http://maps.googleapis.com/maps/api/directions/xml?origin=rua%20visconde%20de%20santa%20isabel%20341&destination=praia%20de%20botafogo%20,370&sensor=false

Esta é a página que eu preciso extrair os dados xml.

Quando eu percorro o array de latitudes eu recebo alguns como este -22.9470000 e acontece o mesmo para o de longitudes daí eu multiplico por 1E6 para obter o inteiro -2294700.

O que voce precisa é usar o mesmo objeto que foi carregado com os dados do xml
Se vc der new estará criando um novo vazio

A H Gusukuma, muito obrigado.

Realmente o objeto estava vazio.

Mas consegui verificando no código onde é que estava preechido o ArrayList.

data = XMLHandler.data;

Resolvido. :stuck_out_tongue: