Servus Community,
ich entwickle derzeit ein App. Derzeit habe ich zwei Activities. Die MainActivity und die SettingsActivity. In der SettingsActivity kann der Benutzer einen String, in meiner Anwendung eine MAC, in einem Textfeld eingeben und anschließend mittels Button speichern.
In der MainActivity brauche ich diesen eingetippten String zur weiteren Verwendung. Ich habe nun zwei Varianten ausprobiert und möchte gerne wissen ob ich hier auf dem richtigen Weg bin.
Variante 1: Beim Start meiner App wird immer ein Toast angezeigt und die BluetoothAbfrage wird angezeigt. Wenn ich nun in meiner SettingsApp den String speichere ( als sharedPreference ) übergebe ich meiner MainActivity anhand eines Intents den String. Dies führt dazu, dass ich meine MainActivity erneut starte. Hier poppt dann wieder der Toast und die Bluetooth Abfrage auf, was nicht sinn der Sache ist. Deshalb komme ich nun zu Variante 2.
Variante 2: Da ich meinen String als sharedPreference mittels einem key speichere hole ich mir in der MainActivity so den String, und nicht mehr über einen Intent. Zumal ich bei einem Intent dann immer wieder zuerst die SettingsActivity aufrufen muss.
Im Code sieht das ganze folgendermaßen aus:
Variante 1 - Code aus der SettingsActivity:
Variante 2 - Code aus der SettingsActivity:
Die saveMAC Methode:
Variante 1 in der MainAcitivty um an den String zu kommen:
Variante 2 in der MainActivity um an den String zu kommen:
Meine Frage nun: Variante 1 ist soweit ich nun erfahren habe nicht geeignet, aufjedenfall nicht so wie ich es gelöst habe, da ich hier die MainActivity starte und somit der "StartToast" wieder erscheint. Ist die Lösung mit der zweiten Variante ( finish(); und den String über sharedPreferences ) so üblich, oder werden solche Vorgänge komplett anderst gemacht? Den String muss ich sowieso abspeichern, da dieser nicht bei jedem Appstart eingegeben werden sollte, sondern nur bei einer Änderung des Geräts.
Bin für jede Anmerkung, für jeden Tipp für jede konstruktive Kritik dankbar! :rtfm:
flo
ich entwickle derzeit ein App. Derzeit habe ich zwei Activities. Die MainActivity und die SettingsActivity. In der SettingsActivity kann der Benutzer einen String, in meiner Anwendung eine MAC, in einem Textfeld eingeben und anschließend mittels Button speichern.
In der MainActivity brauche ich diesen eingetippten String zur weiteren Verwendung. Ich habe nun zwei Varianten ausprobiert und möchte gerne wissen ob ich hier auf dem richtigen Weg bin.
Variante 1: Beim Start meiner App wird immer ein Toast angezeigt und die BluetoothAbfrage wird angezeigt. Wenn ich nun in meiner SettingsApp den String speichere ( als sharedPreference ) übergebe ich meiner MainActivity anhand eines Intents den String. Dies führt dazu, dass ich meine MainActivity erneut starte. Hier poppt dann wieder der Toast und die Bluetooth Abfrage auf, was nicht sinn der Sache ist. Deshalb komme ich nun zu Variante 2.
Variante 2: Da ich meinen String als sharedPreference mittels einem key speichere hole ich mir in der MainActivity so den String, und nicht mehr über einen Intent. Zumal ich bei einem Intent dann immer wieder zuerst die SettingsActivity aufrufen muss.
Im Code sieht das ganze folgendermaßen aus:
Variante 1 - Code aus der SettingsActivity:
Java:
btnSaveMAC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String mac = mactxt.getText().toString();
textViewMAC.setText(mac);
saveMAC("mac", mac);
//Neues Intent anlegen
Intent mainScreen = new Intent(getApplicationContext(), MainActivity.class);
//Intent mit den Daten füllen
mainScreen.putExtra("macaddress", mac);
// Intent starten und zur zweiten Activity wechseln
startActivity(mainScreen);
}
});
Variante 2 - Code aus der SettingsActivity:
Java:
btnSaveMAC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String mac = mactxt.getText().toString();
textViewMAC.setText(mac);
saveMAC("mac", mac);
finish();
}
});
Die saveMAC Methode:
Java:
public void saveMAC(String spString, String s){
Editor editor = sharedpreferences.edit();
editor.putString(spString, s);
editor.commit();
};
Variante 1 in der MainAcitivty um an den String zu kommen:
Java:
BTMAC.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//receiving intents from the settingsactivity
Intent i = getIntent();
// Receiving the Data
String mac = i.getStringExtra("macaddress");
Log.w("myApp", mac);
textViewtest.setText(mac);
// Displaying Received data
}
});
Java:
BTMAC.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SharedPreferences sharedpreferences;
final String MyPREFERENCES = "MyPrefs" ;
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
String mac = sharedpreferences.getString("mac", "");
textViewtest.setText(mac);
// Displaying Received data
}
});
Meine Frage nun: Variante 1 ist soweit ich nun erfahren habe nicht geeignet, aufjedenfall nicht so wie ich es gelöst habe, da ich hier die MainActivity starte und somit der "StartToast" wieder erscheint. Ist die Lösung mit der zweiten Variante ( finish(); und den String über sharedPreferences ) so üblich, oder werden solche Vorgänge komplett anderst gemacht? Den String muss ich sowieso abspeichern, da dieser nicht bei jedem Appstart eingegeben werden sollte, sondern nur bei einer Änderung des Geräts.
Bin für jede Anmerkung, für jeden Tipp für jede konstruktive Kritik dankbar! :rtfm:
flo
Zuletzt bearbeitet: