Zugriff auf String von anderer Klasse, aber wie ?

  • 11 Antworten
  • Letztes Antwortdatum
T

theboss22

Ambitioniertes Mitglied
0
Guten Tag Leute,
ich habe folgenden Code um die GPS-Position zu ermitteln:

Code:
package com.thomaskuenneth.locationdemo1;

import java.util.List;

import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class LocationDemo1 extends Activity {

	private static final String TAG = LocationDemo1.class.getSimpleName();

	private static final String Position = null;

	private TextView textview;
	private LocationManager manager;
	private LocationListener listener;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		textview = (TextView) findViewById(R.id.textview);
		// LocationManager-Instanz ermitteln
		manager = (LocationManager) getSystemService(LOCATION_SERVICE);
		// Liste mit Namen aller Provider erfragen
		List<String> providers = manager.getAllProviders();
		// Infos zu Location Providern ausgeben
		for (String name : providers) {
			LocationProvider lp = manager.getProvider(name);
			Log.d(TAG,
					lp.getName() + " --- isProviderEnabled(): "
							+ manager.isProviderEnabled(name));
			Log.d(TAG, "requiresCell(): " + lp.requiresCell());
			Log.d(TAG, "requiresNetwork(): " + lp.requiresNetwork());
			Log.d(TAG, "requiresSatellite(): " + lp.requiresSatellite());
		}
		// Provider mit grober Auflösung
		// und niedrigen Energieverbrauch
		Criteria criteria = new Criteria();
		criteria.setAccuracy(Criteria.ACCURACY_COARSE);
		criteria.setPowerRequirement(Criteria.POWER_LOW);
		// Namen ausgeben
		String name = manager.getBestProvider(criteria, true);
		Log.d(TAG, name);
		// LocationListener-Objekt erzeugen
		listener = new LocationListener() {
			@Override
			public void onStatusChanged(String provider, int status,
					Bundle extras) {
				Log.d(TAG, "onStatusChanged()");
			}

			@Override
			public void onProviderEnabled(String provider) {
				Log.d(TAG, "onProviderEnabled()");
			}

			@Override
			public void onProviderDisabled(String provider) {
				Log.d(TAG, "onProviderDisabled()");
			}

			@Override
			public void onLocationChanged(Location location) {
				Log.d(TAG, "onLocationChanged()");
				if (location != null) {
					String Position1 = "Breite: " + location.getLatitude()
							+ "\nLänge: " + location.getLongitude();
					textview.setText(Position1);
			
			
					
				}
			}
		};
//		Location locNuernberg = new Location(LocationManager.GPS_PROVIDER);
//		double latitude = Location.convert("49:27");
//		locNuernberg.setLatitude(latitude);
//		double longitude = Location.convert("11:5");
//		locNuernberg.setLongitude(longitude);
//		Log.d(TAG, "latitude: " + locNuernberg.getLatitude());
//		Log.d(TAG, "longitude: " + locNuernberg.getLongitude());
	}


	
	@Override
	protected void onStart() {
		super.onStart();
		Log.d(TAG, "onStart()");
		manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0,
				listener);
	}

	@Override
	protected void onPause() {
		super.onPause();
		Log.d(TAG, "onPause()");
		manager.removeUpdates(listener);
		
		
			
	}
}

Nun möchte ich daran, von einer anderen Klasse auf den String Position1 zuzugreifen, um dort dann die Entfernung zu berechnen.
Leider kommen bei mir dann verschiedene Fehler...wie kann ich so etwas realisieren ? Mit Setter und Getter? :sad:

Vielen Dank im voraus!
 
Ja logisch

public String getPosition1()
{
return this.position1
}
 
Der String ist ja auch innerhalb der Methode "onLocationChanged". Pack ihn mal darüber und schau, ob sich die Fehler auflösen.
 
du meinst so ?
Code:
@Override
			public void onProviderDisabled(String provider) {
				Log.d(TAG, "onProviderDisabled()");
			}

			String Position = new String ("Breite: " + location.getLatitude()
					+ "\nLänge: " + location.getLongitude());
			public String getPosition()
			{
			return this.Position
			}
						
			@Override
			public void onLocationChanged(Location location) {
				Log.d(TAG, "onLocationChanged()");
				if (location != null) {
					String Position = new String ("Breite: " + location.getLatitude()
							+ "\nLänge: " + location.getLongitude());
						textview.setText(Position);

fehler sind noch da :(
 
also damit es klappt einfach mal in der oncreate methode den String initialisieren und nicht in dieser methode , also mach ihn global!!!!

dann machst du einfach in dieser onlocationchanged oder was auch immer


Code:
         ........
         string1=bnlablabla
         .........


Denn es ist klar dass du fehler hast weil du einfach mal in eienr if anweisung eine methode deklarierst und den string ncoh dazu sobald die anweisung verlassen wird kommt der nette garbagekollektor und sammelt diesen "müll" dann ein wie willst du denn darauf zu greifen bitte?

und ausserdem gehören methoden eienr klasse an nicht einer methode selbst du kannst ohne ein objekt nicht auf diese emthode zugreifen.........du solltest dein wissen in objektorientierter programmierung noch ein bisschen vertiefen würd ich dir raten

also mach den string zu einer globalen variable der activity und ebenso die getter methode die den string returnt als methode der activity klasse

Der ursprüngliche Beitrag von 17:00 Uhr wurde um 17:03 Uhr ergänzt:

ok hab grad dein neuen versuch gesehen und es ist schon fast richtig



Code:
@Override
			public void onProviderDisabled(String provider) {
				Log.d(TAG, "onProviderDisabled()");
			}

			String Position = new String ("Breite: " + location.getLatitude()
					+ "\nLänge: " + location.getLongitude());
			public String getPosition()
			{
			return this.Position
			}
						
			@Override
			public void onLocationChanged(Location location) {
				Log.d(TAG, "onLocationChanged()");
				if (location != null) {
                                       //so geht das richtig!!!
					[B][COLOR="DarkRed"]Position =("Breite: " + location.getLatitude()     
							+ "\nLänge: " + location.getLongitude());[/COLOR][/B]
						textview.setText(Position);
 
Zuletzt bearbeitet:
Vielen Dank! :) funktioniert jetzt, die Fehler sind weg.
Bin nun am überlegen wie ich über die andere Klasse auf den String "Position" zugreifen kann. Habe bis jetzt folgendes stehen

Code:
public class zugriff_position {
	
	public static void main(String[] args) {
	System.out.println(LocationDemo1.getPosition());

	}

}

Nach mehreren Tutorials im Netz sollte es so funktionieren, aber irgendwie funktioniert es noch nicht. :(
(Die Klasse auf die zugegriffen werden soll heißt LocationDemo1)

Vielen Dank schonmal :)
 
ok du kannst nciht einfach auf die klassenmethode zugreifen. Die Klasse an sich ist die "Blaupause" für Objekte die aus ihr instanziert werden das heißt du hast deine Klasse und du instanzierst sie mit dem new operator:
Nehmen wir an Klasse ist eine Java Klasse

dann wie du sicherlich weißt erschaffst du ein Objekt dieser Klasse mit folgendem statement:

Klasse objekt=new Klasse();

so und hast du in dieser Klasse deine mMethode getString() implementiert dann hat dieses Objekt jetzt diese Methode auch übernommen und du kannst darauf zugreifen mit ...

objekt.getString();


In deinem Fall ist diese Methode ja in der Activityklasse .

Du musst ja diese LocationDemo1 irgendwie instanziieren also sagen wir mal so:

LocationDemo1 locDemo1=new LocationDemo1();

und du greifst von ausserhalb über das Objekt dann auf den gewünschten String mit der getString methode des Objektes activity mit

locDemo1.getString();

zu.
Aber dazu musst du sicherstellen dass das erzeugte Objekt auch sichtbar und nicht irgendwie eingekapselt ist sonst greifst du ja auf etwas zu was gar nciht existent ist


Kappische?:)

Der ursprüngliche Beitrag von 20:33 Uhr wurde um 20:35 Uhr ergänzt:

Und by the way wir sprechen von Android da gibt es keine main's als Einstiegmethode ins Programm!;)
In Android regieren die Activity's!
 
  • Danke
Reaktionen: theboss22
btw entschuldige für das umständliche zitieren, weiß nicht wie ich das besser hinbekomme :confused2:
 
Zuletzt bearbeitet von einem Moderator:
sollte dann so aussehen

Code:
public class zugriff_position {
	
	public static void main(String[] args) {
        LocationDemo1 locDemo1=new LocationDemo1(); //objekt der klasse erzeugen
	System.out.println(locDemo1.getPosition()); //getPosition aufrufen und den String der Position zurückerhalten

	}

}


:)

Der ursprüngliche Beitrag von 09:08 Uhr wurde um 09:15 Uhr ergänzt:

du solltest das objekt auf jeden fall dort aufrufen wo es auch sichtbar ist:
z.B.

Code:
    public static void main(String Args[])
    {
        public void objectErschaffen()
        {
            Objekt obj=new Objekt();//Objekt erschaffen
            obj.methode();//irgendeine methode des objektes aufrufen
        }
        obj.methode();//FALSCH das Objekt ist nciht mehr existent es wurde in der oberen methode
                        erschaffen und wird gelöscht sobald es diese Methode verlässt!
    }
 
- LocationDemo1 ist eine Activity, die solltest du NIEMALS selbst instanziieren.
- main Methode gibt es bei Android nicht.
- Wenn du auf die Position von irgendwo anders zugreifen willst ohne, dass du von der Activity kommst machst du entweder was grundsätzlich falsch in deiner Architektur oder das ganze ist so fortgeschritten, dass du über einen EventBus nachdenken solltest.
(ich gehe von ersterem aus)


Ich will dir nicht den Mut nehmen, allerdings glaube ich, dass bei dir noch grundsätzliches Programmierverständnis fehlt und im Besonderen noch das Verständnis über die Android Architektur. Tu dir den Gefallen und lese dich erstmal in Activities, Intents, den Lifecycle und so weiter ein. Und versuche richtig Java zu lernen. Das Programmierverständnis kriegt man nicht, wenn man einfach mit Android im kalten Wasser anfängt.

@Jaiel pass auf was für Tipps du hier gibst (explizit jetzt bezüglich Activity instanziieren), das verwirrt Anfänger manchmal mehr als es hilft, wenn es am Ende doch nicht funktioniert. Was ich hier so rauslese programmierst du ja auch noch nicht so lange Java/Android.
 
@Jaiel pass auf was für Tipps du hier gibst (explizit jetzt bezüglich Activity instanziieren), das verwirrt Anfänger manchmal mehr als es hilft, wenn es am Ende doch nicht funktioniert.[/QUOTE]

Jaok da hab cih was verwechslet (ich weiß echt nciht wie ich auf Activityklasse komme lol)natürlich wird eine activity nicht instanziert ich hab ihm auch nur allgemein gezeigt wie man das amcht und bin auch davon ausgegangen dass LocationDemo1 eine Klasse ist aber keine Activity

Was ich hier so rauslese programmierst du ja auch noch nicht so lange Java/Android.
Was soll das denn heißen? oO Ich geb trotzdem einfach nur Tipps!!!
Meine Code beispiele waren auch nciht gerade Falsch
Ja java noch nciht so lange dafür aber C++ schon etwas länger!
 
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
8
Aufrufe
764
jogimuc
J
Zurück
Oben Unten