0

I'm working on an app and I'm stuck witch a problem... I can't get access to an array, outside the if statement... here's my code:

public class MainActivity extends Activity {

    TextView textLat;
    TextView textLong;
    TextView textChange;
    TextView testid;
    float gpsSpeed = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textLat = (TextView)findViewById(R.id.textLat);
        textLong = (TextView)findViewById(R.id.textLong);
        textChange = (TextView)findViewById(R.id.textChange);
        testid = (TextView)findViewById(R.id.testid);

        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener ll = new mylocationlistener();
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);


    }
      @SuppressWarnings("unchecked")
    public static void main(String argv[]) {

            try {

            File fXmlFile = new File("/Users/mkyong/staff.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);

            //optional, but recommended
            //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("station");
            int rows = nList.getLength();
            int cols = 9;

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;

                    String[][]options = new String[cols][rows];

                    options[0][0] = eElement.getElementsByTagName("name").item(0).getTextContent();
                    options[1][0] = eElement.getElementsByTagName("code").item(0).getTextContent();
                    options[2][0] = eElement.getElementsByTagName("lat").item(0).getTextContent();
                    options[3][0] = eElement.getElementsByTagName("long").item(0).getTextContent();
                    options[4][0] = eElement.getElementsByTagName("longlat").item(0).getTextContent();
                    options[5][0] = eElement.getElementsByTagName("uziadvies").item(0).getTextContent();
                    options[6][0] = eElement.getElementsByTagName("bijzonderheden").item(0).getTextContent();
                    options[7][0] = eElement.getElementsByTagName("ref").item(0).getTextContent();
                    options[8][0] = eElement.getElementsByTagName("groterkleiner").item(0).getTextContent();

                }
            }
            } catch (Exception e) {
            e.printStackTrace();
            }
          }
    class mylocationlistener implements LocationListener {

            @Override
            public void onLocationChanged(Location location) {
                if(location != null)
                {
                    double pLong = location.getLongitude();
                    double pLat = location.getLatitude();
                    gpsSpeed = ((location.getSpeed()*3600)/1000);

                    textLat.setText(Double.toString(pLat));
                    textLong.setText("jo");

                    double compareLatCoords = 51.704704;
                    double compareLongCoords = 4.854369;

                    testid.setText(Float.toString(gpsSpeed));

                    if (pLat <= compareLatCoords)
                    {
                        textChange.setText("Je bent net de bedaulxstraat doorgereden");
                    }
                    if (pLong >= compareLongCoords)
                    {
                        textChange.setText("U bent door een andere straat gereden dan daarnet.");
                    }
                }

            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                // TODO Auto-generated method stub

            }


        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

It's about the array: options[i][j] and I can't get access outside the if statement... I've been working on this for two days now and I can't find a solution...

EDIT: Thanks for all the answers, but when I try to access the variables (for example: options[1][0]) in public void onLocationChanged(Location location) {...}. I get the error: options cannot be resolved to a variable.

Greets, Kenneth

  • That's because your array doesn't exist outside of the if statement. Please learn a little about [variable scope](http://en.wikipedia.org/wiki/Scope_%28computer_science%29). (And sequential programming besides.) – Hot Licks Jun 04 '13 at 11:06
  • 2
    You could make the question easier to answer by removing all irrelevant code. – Frank Kusters Jun 04 '13 at 11:08

2 Answers2

2

Declare array String[][]options outside of for-loop and define it when necessary.

String[][]options = null;
for (int temp = 0; temp < nList.getLength(); temp++) {
    Node nNode = nList.item(temp);
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
        Element eElement = (Element) nNode;
        options = new String[cols][rows];
        ...
Subhrajyoti Majumder
  • 40,646
  • 13
  • 77
  • 103
  • Thanks for your answer! However, when I'm trying to make a variable in public void onLocationChanged(...){ I still get an error saying: "options cannot be resolved to a variable" –  Jun 04 '13 at 11:20
2

if you define any variable inside if statement , it will be local variable-->"and the scope of a local variable are the enclosing brackets, you can access it only inside the if Block" ,So define options outside if statement

 String[][]options = new String[cols][rows];
if (nNode.getNodeType() == Node.ELEMENT_NODE) {

             ...
}
Alya'a Gamal
  • 5,624
  • 19
  • 34