Android Activity Variablen-Initialisierung

aquarium1974

Aktives Mitglied
Hallo zusammen,

hab schon viel gelesen, gegoogelt und probiert,
ich komm nicht drauf.

Ich will hier ein Android-App basteln...
Ich will zu beginn der Klasse ein paar Variablen global deklarieren. (strPath....)
Aber wenn ich diese Variablen nachher auslesen will steht null drin. Warum?

Hängt das mit dem Lebenszyklus von Apps zusammen oder warum kann ich die gesetzten Werten nicht sehen?

Die Methode auslesenKonfiguration ist in oncreate eingebettet, in der ja auch die strPath.... Variablen global definiert sind.
Warum sind sie in der Methode auslesenKonfiguration(); trotzdem null?

Im Debugger sehe ich strPath=null..... 🙁

Bin dankbar für jeden Tipp, komme nicht weiter.

Danke
Aquarium1974

Java:
public class Test1Activity extends Activity implements OnClickListener,
		LocationListener {

	LocationManager locationManager;
	Geocoder geocoder;

	// Initialisierung Variablen
	String strKennzeichen, strJetztDatum, strJetztUhrzeit, strStrasseOrt,
			strLaenge, strBreite, 
			strFabrikat, strMailadresse, strFilename,
			strTelefonnummer;
	public static String strPath, strPathDatenbank, strPathKonfiguration, strPathFoto;
	EditText edittextDatum, edittextUhrzeit;
			 
	TextView textviewStrasseort, textviewTelefonnummer;
	Button buttonJetztDatum, buttonJetztUhrzeit, buttonGPS, 
			buttonSenden;

	// DBZugriff db;
	SQLiteDatabase myDB = null;

	Date date = new Date(System.currentTimeMillis());

	// final String datetime = dateFormat.format(date);

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		onCreateDBAndDBTabled();

		// strPath = Environment.getExternalStorageDirectory() + File.separator
		// + "parksuender" + File.separator; // Standardpfad für
		// // Applikation setzen

		strPath="";
		strPath = Environment.getExternalStorageDirectory() + "/park";
                strPathFoto = strPath + "/foto";
		strPathKonfiguration = strPath + "/konfiguration";
		strPathDatenbank = strPath + "/datenbank";

.....

public void auslesenKonfiguration() {
		File sdcard = Environment.getExternalStorageDirectory();

		File file = new File(strPathKonfiguration, "/adresse.txt");

		// Read text from file
		StringBuilder text = new StringBuilder();

		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String line;

			while ((line = br.readLine()) != null) {
				text.append(line);
				text.append('\n');
			}
		} catch (IOException e) {
			// You'll need to add proper error handling here
		}

		EditText m = (EditText) findViewById(R.id.meldender);
		m.setText(text);
	}
 
Zuletzt bearbeitet von einem Moderator:
wer sagt denn dass onCreate() ausgeführt wird?
am Code nicht zu erkennen, komplizierte Activity-Wasauchimmer-Frameworks sind auch nicht ganz Java-Basics-Bereich,

debugge oder logge mit System.out.println() ob die Methode je dran kommt, auch ob vielleicht in einen anderen Objekt
als dem, in welchem später auslesenKonfiguration() ausgeführt wird
(edit: ok, statische Variable..)

vielleicht missinterpretierst du auch deinen Debugger, extern sind solche Aussagen jedenfalls nicht zu überprüfen,
möglichst immer vollständigen Code posten, den anderen ausführen können und selber die Ergebnisse sehen,

wenn man eine main-Methode erstellt, ein Objekt dieser Klasse erzeugt,
selber beide Methoden direkt hintereinander aufruft, dann ist strPath nicht null oder?
 
wer sagt denn dass onCreate() ausgeführt wird?
am Code nicht zu erkennen, komplizierte Activity-Wasauchimmer-Frameworks sind auch nicht ganz Java-Basics-Bereich,

debugge oder logge mit System.out.println() ob die Methode je dran kommt, auch ob vielleicht in einen anderen Objekt
als dem, in welchem später auslesenKonfiguration() ausgeführt wird
(edit: ok, statische Variable..)

vielleicht missinterpretierst du auch deinen Debugger, extern sind solche Aussagen jedenfalls nicht zu überprüfen,
möglichst immer vollständigen Code posten, den anderen ausführen können und selber die Ergebnisse sehen,

wenn man eine main-Methode erstellt, ein Objekt dieser Klasse erzeugt,
selber beide Methoden direkt hintereinander aufruft, dann ist strPath nicht null oder?

Klar wird oncreate ausgeführt.
Die anderen Methoden (onresume, onstop etc. sind lediglich mit Hülle implementiert (--> leer).
Und in oncreate liegt der gesamte Code...
Ob's elegant ist ist ne andere Frage, geht sicherlich besser. Aber solange ich diesen Fehler nicht weg bekomme gehts nicht weiter...
 
Ist zwar eher OT, aber

Java:
 Date date = new Date(System.currentTimeMillis());

Ist es nicht unsauber, Date-Objekte so zu initialisieren? Ich würde das nur über Methoden und Konstruktoren machen.
 
funktioniert System.out.println() oder irgendein sonstiges Log?
kannst du in eine Datei auf der Festplatte schreiben, kannst du Strings in einer statischen Variable zusammengefügt speichern und später auslesen, meinetwegen dann auch mit dem Debugger?

vom jetztigen Standpunkt aus funktioniert ja nichts, insofern kann man nichts erwarten, überall könnten irgendwelche Fehler auftreten,
wenn ein Hello World-Programm nicht "Hello World" ausgibt, tja, da kann man wenig nachforschen,
erst wenn eine gesicherte Ausgabe irgendwo irgendwie funktioniert kann man anfangen, andere Dinge zu untersuchen

also ich rede jetzt mal vom 'loggen' egal auch welche Weise das umgesetzt ist,
welcher Code von dir kommt als erster dran?
logge dort 'Programmstart', wenn das irgendwo, irgendwie zu sehen ist, wäre das ein erste zählbarer Erfolg gegenüber bisher gar nichts
(ich weiß, du hast vielleicht schon viel, manches läuft und kannst gut debuggen usw., aber es noch nichts hier zu sehen 😉 )

füge spaßeshalber einen Default-Konstruktor in Test1Activity ein, falls das keinen Regeln widerspricht
und logge, ob so ein Objekt überhaupt erstellt wird,
immerhin auch eine zählbare Info, auch wenn sie wohl nichts weiter bringt

logge ob die Methode onCreate() begonnen wird, vor dem super-Aufruf, nach dem super-Aufruf, und auch ganz am Ende,
was nahelegt, dass nicht durch (nicht sichtbare) Exception abgebrochen wird,
logge den Wert von strPath vor und nach der Zuweisung,

sicherlich sollte dort eine Zuweisung genauso viel bringen wie etwa ein Log-String in einer statischen Variable,
aber es ist wieder mindestens eine Info, wenn im Log steht dass die Variable zugewiesen wird und sie später dann doch null ist,

kommt irgendwelcher Code dran bis zu der Stelle zu du strPath brauchst, bisher nachschaust ob es null ist?
wo immer möglich logge was zu allen Zeitpunkten in dieser Variable steht, wird sie irgendwann wieder null?

-----

wichtig ist mir überhaupt irgendeine Bestätigung dass die Zuweisung stattfindet außer dein
> Klar wird oncreate ausgeführt.
hast du was zu bieten?
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben