# Android: Auslagern in eigene Klassen



## Fraver (1. November 2014)

Hallo, 

das letzt Mal, wo ich mit Java zu tun hatte, war vor mehr als 10 Jahren in der Schule. Lang lang ist her. 

Nach ganzen zwei Tagen habe ich es endlich geschafft, eine App für mein Tablet zu schreiben, welches mir die Geodaten liefert. Egal wo ich bin, Straße und Hausnummer haut immer hin. 

Nun soll das aber nicht der Kern meiner App sein, sondern nur bei Bedarf in Erscheinung treten. Mit unterschiedlichen Angaben. Mal brauch ich das Bundesland, mal die Straße, mal den Ort....

Weil das jetzt mit diesem Geocode so schön klappt, würde ich den gern in einer separaten .java Klasse haben und immer dann, wenn ich Informationen zum Standort brauche, mir diese entsprechend aus dieser Klasse rausziehe. 

Und da gehts jetzt los.

In der MainActivity läuft alles super. Dank zahlreicher Tutorials. 
Aber wie schreibe ich das jetzt alles in eine eigene Klasse und wie müssen da die Rückgabewerte aussehen? Und wie frage ich diese dann aus der Main ab? Dazu kommt noch, wie ich diese neue Klasse dazu bringe, die Geodaten zu ermitteln? 

Beispiel:

In der App habe ich zwei Buttons. Willst du wissen, wo du bist? Ja/Nein. 

Bei Ja, ist klar, soll die Geodaten-Klasse ausgeführt werden. Bei Nein irgendwas anderes. 

Aber mir gehr es erstmal um das Ja. 

Vielen Dank fürs durchlesen und eure hoffentlich zahlreichen Lösungen.

Lg Andy


----------



## sheel (2. November 2014)

Hi

es würde sehr helfen, deinen aktuellen Code herzuzeigen (der aufgegliedert werden soll)


----------



## Fraver (2. November 2014)

```
package com.example.meinstandort;

import java.io.IOException;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class LocationActivity extends ActionBarActivity implements LocationListener {
   
      private static final String TAG = "LocationActivity";

      LocationManager locationManager; //<2>
      Geocoder geocoder; //<3>
      TextView locationText;
     
     

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);
       
        locationText = (TextView)this.findViewById(R.id.LocationInfo);   
       
        locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE); //<2>
       
        geocoder = new Geocoder(this); //<3>
       
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); //<5>
        if (location != null) {
          Log.d(TAG, location.toString());
          this.onLocationChanged(location); //<6>
        }
    }
   
      @Override
      protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this); //<7>
      }

      @Override
      protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this); //<8>
      }   

    @Override
    public void onLocationChanged(Location location) {
        Log.d(TAG, "onLocationChanged with location " + location.toString());
        String text = String.format("Lat:\t %f\nLong:\t %f\nAlt:\t %f\nBearing:\t %f", location.getLatitude(),
                      location.getLongitude(), location.getAltitude(), location.getBearing());
       
       
        this.locationText.setText(text);
       
        try {
          List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 10); //<10>
          for (Address address : addresses) {
            this.locationText.append("\n" + address.getAddressLine(0));
          }
         
          int latitude = (int)(location.getLatitude() * 1000000);
          int longitude = (int)(location.getLongitude() * 1000000);


                  
        } catch (IOException e) {
          Log.e("LocateMe", "Could not get Geocoder data", e);
        }
       
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Automatisch generierter Methodenstub
       
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Automatisch generierter Methodenstub
       
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Automatisch generierter Methodenstub
       
    }
}
```


----------



## Fraver (2. November 2014)

Das ganze gibt halt nur die Koordinaten aus und die Geodaten. Das alles hätte ich gerne in eine separate Datei.


Edit:

Es wär dann natürlich schön, wenn diese ganze Prozedur keinen gesamten String ausgibt, sondern sämtliche Daten, einzeln.

Ich steh halt nur voll auf dem Schlauch, weil ich nicht weiß, ob ein return reicht oder nicht oder wie das alles auch immer funktioniert.

Das ganze soll eine App für verschiedene Baustellen werden. Also im Grunde eine reine Datenbank-App.
Durch den Geocode soll die App von sich aus ermitteln, wo sich der Bauleiter befindet und die entsprechende Datenbank zur Verfügung stellen.

Auch andere Teile der App sollen darauf Zugriff haben. Zum Beispiel zum ermitteln der Werktage, unter Berücksichtigung der gesetzlichen Feiertage und der, die zu dem Bundesland, in dem sich der Bauleiter befindet, zählen.


----------

