Hallo zusammen,
ich hätt´ da mal wieder ein Problem: Es erweitert im grunde einer meiner früheren Fragen, die ich zum Glück als gelöst betrachte. Es geht dabei um eine grundlegende Frage zur Struktur meiner App:
Ausgangssituation 1:
- Was will ich können: Ich parse aus meiner main-Activity mit einem DocumentBuilder aus javax.xml.parsers ein XML-Dokument. Ob ich dieses außerhalb der Activity noch brauche, weiß ich noch nicht ganz genau. Ich habe das Ganze jetzt außerdem in einen AsyncTask ausgelagert, der mir nach Ende des Parsens das Attribut setzt, also in Kurzform:
public class MyActivity extends Activity {
private DocumentBuilderFactory docBuilderFac = DocumentBuilderFactory.newInstance();
private DocumentBuilder documentBuilder;
private Document doc;
public class FileParseTask extends AsyncTask<String, Void, Document>{
@Override
protected void onPreExecute(){
}
@Override
protected Document doInBackground(String... url) {
// ...
doc = documentBuilder.parse(url[0]);
return doc;
}
@Override
protected void onPostExecute(Document result){
documentParsed();
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new FileParseTask().execute("http://192.168.0.99/myXML.xml");
// ...
}
private void documentParsed(){
// z.B. das UI updaten, ...
}
Alles anzeigen
Frage 1:
Ist das so soweit erstmal sinnig, also insbesondere "doc" als Attribut anzulegen und dann direkt "aus der Activity heraus" zu parsen? Oder sollte man diese ganze Funktionalität irgendwie in einer weiteren Klasse "kapseln"?
Frage 2:
Gesetzt den Fall, ich würde dieses doc nun auch in anderen Activities verwenden wollen (und z.B. auch ändern wollen), wie übergebe ich es dann sinnvollerweise an andere Activities? Ich habe an dieser Stelle einiges über das Singleton-Entwurfsmuster gelesen, aber das wird ja gern auch als versteckte globale Variable verpönt. Also: Letzten Endes sind die Daten des docs gemäß einer Aufteilung in Model-View-Controller ja der Model-Schicht zuzuordnen, wie baue ich mir aber diese Model-Schicht sinnvollerweise am besten auf? Insbesondere könnte ja meine main-Activity nicht die einzige sein, die daran interessiert ist, ob z.B. das Parsen beendet ist?!
EDIT Frage 3:
Die letzte Frage ergänzend: Wieviel "Logik" was das Aufbauen irgendwelcher Verbindungen, das Parsen einer xml, ... angeht sollte denn die Activity überhaupt beinhalten?
Erneut leicht verwirrte Grüße,
FargoTof