Beiträge von killphil75

    Hallo


    was meinst du mit Vorbereitung ???


    Grundsätzlich basieren heute viele Datenbanken auf der SQL Sprache, d.h. der Aufbau deiner Tabellen sieht schon überall ähnlich aus.
    Unterschiede gibt es oft in Sprachkonstrukten und zusätzlichen Funktionen (Trigger z.B.), da können manche Datenbanken mehr als andere.
    Wenn du vorher schon weisst das die ZielDatenbank eine Andere ist, würde ich lieber gleich dafür entwickeln - das spart Dir später jede Menge Zeit um bestimmte Sachen wieder umzustricken.


    Meinst du wirklich MSSQL ??? oder MySQL ???


    bei MSSQL -> siehe https://groups.google.com/foru…id-developers/H2HWiWOwt_Y
    und auch hier
    http://msdn.microsoft.com/de-de/sqlserver/aa937724.aspx


    ist dann in etwa die selbe Lösung wie unten angedeutet.


    Zitat

    Wirde ein Virtuellen Windows Server nutzen die Datenbank soll für eine Info App sein.
    In der Datenbank soll eine Textdatei und Bilder gespeichert werden.


    Hmmm, erklär doch mal genau was du vorhast. Also zum Beispiel:


    Ich will eine App schreiben, welche sich mit einem externen DatenbankServer verbindet und mir Daten an meine App liefert.
    Hierbei gibt es dann mehrere Probleme zu bedenken.


    -> Wie soll zwischen deiner App und der Datenbank kommuniziert werden ? -> Requestanfrage an Datenbank und Datenabruf,


    -> Ich habe jetzt keine Ahnung wie auf eine Access-Datenbank/ MSSQL aus dem Netzwerk zugegriffen werden kann und ob es da einfach zugängliche Schnittstellen gibt (Stichwort Mehrbenutzerbetrieb ect.)


    -> in den meisten Fällen wo so eine Lösung gewünscht ist (und es wenig bis nichts kosten darf) nutzt man MySQL Datenbanken (die bekommt man zu fast jedem WebHosting Angebot dazu, steht damit also bereit im Internet/Netzwerk bzw. kannst du auch daheim als virtueller Server betreiben (Xampp, Linux , NAS - wie auch immer) -> der Vorteil MySQL ist weit verbreitet (auf jeder Plattform) und du findest jede Menge Dokumentationen


    -> nun das nächste Problem , wie greife ich zum Beispiel auf eine MySQL Datenbank zu ??? -> leider bietet Android von Hause aus keinen direkten
    Weg an -> Datenbanken in Android basieren alle auf SQLite und sind lokaler Natur -> aber


    -> hier gibt es dann die Möglichkeit direkt über Java und JDBC auf deine MySQl Datenbank zuzugreifen (zusätzliche Treiber) - früher gab es da mal Probleme mit den richtigen Treibern passend zur MySQLVersion, das sollte aber mittlerweile gelöst sein, dennoch raten viele Menschen davon ab, direkt aus der Android App mit dem Datenbank-Server zu kommunizieren. Einfach mal googlen da gibt es genug Lesestoff. (Sicherheitspprobleme ect pp)


    -> eine Lösung welche sich hier anbietet ist die Kommunikation über XML oder JSON und der Aufruf sogeannter Hilfsroutinen in PHP, d.h. man baut sich selber eine Schnittstelle zwischen App -> Server (php) -> Server (Datenbank)

    ein sehr ausführliches Beispiel findest du zb hier : http://www.androidhive.info/20…t-android-with-php-mysql/


    ok das nur ein kurzes Exkurs zum Thema Datenbanken - was nun noch folgen würde - sollen die Daten auch lokal in der App gespeichert / synchronisiert werden - oder ist dei App nur funktional wenn es eine Netzwerkverbindung gibt ect pp.

    Anti_ios


    Irgendwo hier im Forum haben wir das schon mal besprochen, wie das mit den Tilemaps funktioniert... am besten mal nach Tilemap suchen
    Ebenso solltest du die Sache mit den Scrollviews vergessen, das wird so nicht funktionieren. Sag doch lieber noch mal genau was du vorhast, da findest man sicherlich schneller einen Ansatz.



    Grundsätzliches zu einer Tilemap.


    -> in einer Grafik werden alle grafischen Elemente einer Map zwischen gespeichert. Der Aufbau erfolgt hierbei oft Blockweise, weil man das ganze besser mathematisch handeln kann. Auch das "kopieren" auf den Canvas macht blockweise mehr Sinn.


    Grafisches Beispiel von google: http://www.swingswingsubmarine…0/11/Woodland_Tileset.png


    Hier sind es zum Beispiel Quadrate 32x32. Die Teile werden nun durchnummeriert und mit koordniaten versehen.


    1 = Erde = 0,0 (0 Spalte, 0 Zeile)
    2 = wasser = 1,0 (1 spalte, 0 Zeile)
    3 = Feuer = 2,0 (2 Spalte, 0 Zeile


    ect pp.


    Deine eigentliche Spielmap (3840*2400 ) wäre somit 240x 150. Was du jetzt nur noch benötigst ist ein einfaches Array int[x,y,objekt]


    int[][] map = new int[240][150];


    Der eigentliche Wert der gespeichert wird entspricht dem eigentlichen Map Objekt. Wir reden hier immer noch nur über die MAP.
    Andere Objekte welche mit Dir und der Spielwelt interagieren, sollte man seperat ablegen. (ebenfalls Array oder List)


    Ok jetzt habe ich eine riesige Map als Ints, was nun.


    -> Darstellen:


    Um performant zu bleiben, zeigt man immer nur den Spielabschnitt welche gerade "belaufen" wird - Also im Grunde deine Bildschirmgrösse.


    nehmen wir als Beispiel 800x480 (typisch Android Handy) = 50 x 30 Blöcke a 32x32 Pixel. Für das Scrolling muss du disesen sichtbaren Ausschnitt auf deiner Riesenmap nur "verschieben" und holst Dir immer die jeweiligen Daten aus dem Array zum anzeigen.


    schematisch sieht das dann so aus.


    --------------------------------------------------------------------|
    |
    |
    | |--------------------|
    | | sichtbarer Teil |
    | |--------------------|
    |
    |
    |
    |------------------------------------------------------------------|


    Du musst das Scrolling nur noch "relativ" zu deiner Spielfigur und zu der Map berechnen.


    -> Prüfen Koordinaten der Spielfiguren (Kollisionen? Verschiebung weiter möglich oder Map Ende?)
    -> Verschiebe Koordinaten Mathematisch
    -> Zeichne Map neu
    -> Zeichne ander bewegte Spielobjekte neu (Spieler, gegener ect pp)
    -> Zeichne "onTopElemente" (Punkte, Zeit, Button)


    -> thats it.

    Spontan würde ich sagen deine Adapterimplementation ist fehlerhaft.


    Du greifst in deiner OnCreate auch direkt auf Daten vom Fragment zurück, das ist eigentlich böse und mit globalen Vars vergleichbar. Fehler an solcher Stelle findest du nie -> soetwas immer per Parameterübergabe lösen.


    Hier im Forum gibt es ein Tut zum Thema Listview von Uwe, da am besten mal durchlesen, er hat das schön zusammengefasst.



    Was momentan bei Dir passiert - bei jedem Onclick - setzt du den Adapter Neu - da du aber den jedes mal "listView.setAdapter(new MyListAdapter(getActivity()));" einen neuen Adapter kreierst, hat der Listview auch nur 1 Eintrag.


    -> da bei Android immer alles verknüpft ist und auf listener ect pp hört.
    musst du normalerweise nur 1x deinen Adapter für den Listview generieren,
    sobald du dann Daten hinzufügst oder änderst, machst du das direkt mit dem Adapter und das sich etwas geändert hat teilt man dann nur noch per


    myadapter.notifyDataSetChanged();



    mit.



    Also Schema F bei mir


    Activity onCreate


    -> Arrayliste mit Daten wird angelegt
    -> Adapter wird erzeugt und diese Liste übergeben
    -> Listview im Layoutsuchen
    -> Adapter an Listview koppeln
    -> bei Bedarf OnClick Listner setzen
    -> fertig


    -> sobald Daten neu hinzukommen -> myadapter.notifyDataSetChanged();
    -> der Listview wird dann automatisch vom Adapter neu befüllt


    -------------------------------------------------------------------------------------------------



    Code
    public KaderAdapter(Activity context, int textViewResourceId, ArrayList<Spieler> items) {
    	                super(context, textViewResourceId, items);
    	                this.items = items;
    	                this.adaptercontext = context;
    	                mInflater = (LayoutInflater) context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    	        }


    Das mit dem Layout ist nur ne Zusatzoption, damit kann ich verschieden Layouts dem Adapter übergeben und bin flexibler.

    Zitat


    Desweiteren wollte ich fragen, wie lang die Zeit sein sollte bis man Sachen aktivieren kann?
    (Also Bauteil gedrückt halten bis man den Wert ändern kann, bzw. bei Logik den Eingang aktivieren)
    Hab die Kritik bekommen, es sollte kürzer sein.


    Wie löst du das den momentan ? (also die Zeitmessung) Handler und Postexecute ?


    Eventl kannst du ja einen Einstellungsscreen bauen und da den User selbst die Wahlmöglichkeit bieten, wie viel Zeit verstreichen soll.


    150 ms - 1500 ms

    Hmmm damit LogCat Meldungen ausspuckt muss man auch Log Ausgaben in seinen Source einbauen. (ok wenn das Programm abstürzt dann gibt es auch Ausgaben)


    -> Ein Tipp - um zu prüfen ob bestimmte Programmteile überhaupt abgearbeitet werden immer mal was ins Log schreiben
    -> als erstes prüf ob dein "OnClickListener" aufgerufen wird


    Code
    @Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
    		savePreferences("CHECKBOX", checkBox.isChecked());
    		if (checkBox.isChecked())
    			savePreferences("NAME", editText.getText().toString());
    
    
    		finish();
    	}


    das ist in so fern problematisch, da du nicht prüfst welcher Button gedrückt wurde, d.h. jeder onclick führt eigentlich zum Save-vorgang.


    Hast du mal geprüft ob es ein Context Problem sein könnte


    -> statt


    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);



    mal



    SharedPreferences sp = PreferenceManager
    .getDefaultSharedPreferences(this.getApplicationContext());


    oder


    SharedPreferences sp = PreferenceManager
    .getDefaultSharedPreferences(getBaseContext());

    Wie wär es den String auf Länge oder Leere zu Testen ???



    deinstring.isEmpty() == true


    deinstring.length() == 0


    deinstring.equals("") == true




    NULL ist eigentlich für leere nicht initalisierte Objekte

    Aus einem Thread kannst du niemals Dinge im UI-Thread ansprechen, weil du nicht weisst ob die noch da sind (Stichwort Nullpointer Exception).
    Dafür benötigst du einen Handler, welcher UI Ausgaben macht bzw. darüber kommuniziert.


    Das ist mir immer alles viel zu kompliziert, deswegen nutze ich den AsyncTask, der hat schon entsprechende Methoden dafür (zb Progress).


    http://developer.android.com/r…android/os/AsyncTask.html

    Zitat

    Zum Thema Produkte : ja diese ändern sich nicht so schnell. Und nur Ich kann diese anlegen. Also nicht die Benutzer der APP.


    Na dann trenn doch einfach die Stammdaten und die Bewertungsdaten


    -> Produktdaten lädts du komplett in deine App -> SQLite


    -> Bewertungsdaten holst du nach wenn sie angefragt werden nd cached sie mit in einer SQLite Tabelle.
    -> wenn die Bewertungsdaten älter als 1Tag / 2Tag2 / 1Stunde / 10Stunden je nachdem wie aktuell die Daten sein müssen, aktualisierst du sie und gut ist.


    -> SQLite im Android ist natürlich etwas beschränkter als MySQL auf einem WebServer , aber bislang hatte ich damit auch noch nie Probleme.



    http://schimpf.es/sqlite-vs-mysql/

    Zitat

    Ich Verbinde mich mit meiner APP zu einer externen MySQL Datenbank um verschiedene Daten abzurufen. Wäre es jetzt sinnvoll die gesammelten Daten auf die Gerät eigene SQL Datenbank zu kopieren ??


    Du hast geschrieben, das es sich um eine Bewertungsapp handelt, das heisst die Daten verändern sich ständig
    - daher wäre ein ständiges Updaten/Synchronisieren der DB auf das Handy die Folge und stets mit jeder Menge Downloads verbunden.
    Selbst wenn du die DB trennts -> Produkt Update und Update der Bewertungen (Weil ja die Produkte sicher nicht so häufig wechseln wie die Veränderung der Bewertungen kämen da noch jede Menge Daten zusammen.


    Der schlankere Weg ist sicherlich, die Daten live in kleineren Paketen abzurufen (json).
    Natürlich ist es auch schön wenn Daten offline verfügbar sind, solch eine Cachelösung kannst du Dir immer bauen, das würde ich aber wie gesagt von der Aktualität der Daten abhängig machen, das kannst nur Du entscheiden.

    Jaein,
    kannst du machen, wie gesagt je nach Sensibilität der Daten und mit dem MCrypt ist es ja auch kein Problem. Also der Key bleibt unangetastet nur das Value wird verschlüsselt.
    Um etwaigen Angreifern keine große Chance zu geben sollten auch die keynamen nicht zu detailiert sein.


    also [{user: Bernd},{passwd: 23344}] ist sicherlich keine gute Idee. Entweder man nimmt Zahlen (was aber auch für einen Selber sehr unleserlich wird (im Source und man immer seine Aufzeichnung "Was war gleich die nummer 10?" bei der Hand braucht) oder verdeutscht und verkürzt:


    bi = benutzerID
    cp = crypted Passwort,


    damit sparst du auch Traffic.


    ---------------------------------------------------------------------------------------



    Bei mir habe ich das alles über die ID gelöst.
    Wenn in meiner App niemand angemeldet ist, so bleiben ihm diverse Bereich versperrt.


    Login ist natürlich offen:


    -> Benutzername und Passwort (EditText) werden an PHP Login-Skript verschickt.
    -> Bei erfolgreichem Login sendet dies mir ein JSON-Array mit der verschlüsselten ID des Users zurück und noch ein TRUE, damit ich weiss, das Login war erfolgreich,
    -> ID und Login-Status speichere ich in der App. (Prefs) -> (Damit muss sich der User nicht jedesmal wieder neu anmelden - das nervt ja sonst)


    -----------------------------------
    Jetzt stehen dem User alle Bereiche offen,
    bei jedem Request sendest du jetzt die verschlüsselte Id mit und entschlüsselst Sie wieder auf der PHP Seite. Damit ist der User eindeutig erkennbar.


    Wenn du die Sicherheit erhöhen willst, kannst du natürlich auch jedes Mal den Benutzernamen,Passwort noch mal mitschicken und dann im php doppelt Prüfen.
    Also nochmal über Kreuz. LoginDaten App / LoginDaten Server.


    Ich hatte damals das Problem das Userdaten und Inhaltsdaten in verschiedenen Datenbank lagen und jedes Mal 2 Verbindungen zu öffnen, bei jeder kleinsten Anfrage, brachte dann Performanceprobleme mit sich bzw. war nicht sehr elegant.


    Ich weiss ja nicht welches CMS du auf euerer ClanSeite benutzt, sicherlich liegt dort alles in einer Datenbank und man könnte über diese doppelte Sicherung nachdenken.

    -> also deine Infos welche Du oft benötigst und in der App auch offline anzeigen lassen möchtest, würde ich cachen bzw. richtig speichern.
    Bei einer Mitgliederliste wo du gleich mehrere Informationen hast, würde ich mir lokal auf dem Handy eine SQLite Datenbank anlegen und die Daten dort hinterlegen.


    Wenn deine App neu auf einem Handy installiert wird, wäre es dann folgender Ablauf
    -> Prüfe auf SQLite Mitgliederdatenbank -> Wenn Leer dann alle Daten vom Server holen und Datenbank befüllen.


    Wenn deine App bereits installiert ist


    -> Prüfe ob Netzwerkverbindung ->Falls Online Anfrage an Server nach DB Version / Vergleich lokale/entfernte Datenbank z.b. über Datum der letzten Änderung bzw. Anzahl der User je nach dem was für Dich Sinn macht. -> falls Update nötig -> Datenbank aktualisieren
    -> wenn Version bereits aktuell .> weiter im Context,


    -----------------------------
    wenn du nur kleinere Datensätze speichern musst, kannst du Dir auch Daten als Text, JSON oder XML Dateien ablegen und einen Filecache bauen, das sollte man dann von Fall zu Fall entscheiden. Wobei die SQLite Lösungen sicherlich immer die systemkonformste Art ist, weil Android alles mitbringt um diese komfortabel zu nutzen. (Stichwort: LOADER )
    -----------------------------



    Nochmal zum Thema Sicherheit: Klar liest die NSA alles mit, aber :



    Zitat

    andererseits frage ich mich ob die Daten und Informationen die ich
    verwenden werde so Geheim sein werden!?


    Hmm allein wenn du Usernamen und Passwörter im Klartext überträgst schaffst du Dir selber eine Sicherheitslücke bzw. gefährdest die Daten deiner User.
    So bekomm ich Zugriff auf die Userprofile, da finde ich die Email des Users, eventl noch mehr Informationen naja und so wühle ich mich durch bis ich dann andere Logins von Ihm übernehme ect. pp (User sind oft limitiert was die Varianz der vielen verschiedenen Logins in Foren/Facebook/Email ect. angeht


    Passwörter in Foren sind heute ja sowieso oft gehashed und gesalzen. D.h. um das Passwort auf Richtigkeit zu prüfen musst du ja auf die Loginroutine deines Forums zurückgreifen. Um hier die Sicherheit zu erhöhen würde ich aber dennoch zwischen Android-App und PHP Skript mit Verschlüsselung arbeiten, es ist kein wirklicher Mehraufwand und du kannst ruhiger schlafen.


    Phase 2 wäre dann, das ich dein PHP Skript mit Daten bombardiere, wenn da auch noch Lücken sind (SQL Injections) dann übernehme ich deinen ganzen SQL Server und am Ende reiss ich deine ganze Seite runter. :( nicht gut.


    ------------------------------------------------------------
    Generell noch mal zu deiner App-Idee.


    Ich hab damals (2011) bevor ich wieder mit Java/Android begonnen habe, bei meiner ersten App erst einmal eine MindMap gebaut (xmind) da habe ich mir in schöne Blasen alle Sachen reingeschrieben was die App können soll bzw. was rein muss und was für die Zukunft geplant ist. Wenn man sich das ganze aufmalt oder schreibt, dann werden schon auf dem Papier einige Probleme sichtbar. (Das schützt einen natürlich nicht davor, das die App hier und da dann doch etwas "wuchert", aber so als Richtlinie, ist es eine ganz gute Hilfe. So kann man sich selber Step by Step vorwärts tasten und du hast kleine Erfolgserlebnisse (milestones).





    PS: Was seid Ihr für ein Clan ?

    Hallo,


    Zitat

    Zu Beginn möchte ich nichts weiter wie ein Loggin Bereich (Ich glaube das schwiesigste ersteinmal überhaupt) und dann eine Übersichtsseite mit ein zwei Buttons die dann zu den einzelnen Features führen wie zB. Mitgliederliste, Terminpläne .....


    http://www.androidhive.info/20…t-android-with-php-mysql/


    Zitat


    Meine Gedanklicher Ansatz ist hierzu nun das ich mit JSON ARRAY arbeite würde um an die Daten der Homepage bzw. SQL Datenbank zu gelangen. Da ich damals gescheiter bin direkt an die SQL Datenbank der Homepage zukommen.


    Ja das wäre ein möglicher Weg. Anfragen an deine WebSeite als HTTP Request (POST) verschicken. Wichtig wäre hier
    ein Verschlüsselung, weil man AndroidApps auch dekompilieren kann bzw. auch die Prefs auf dem Handy auslesen.
    Also IDs bzw Passwörter würde ich immer verschlüsseln.

    Ich hatte ein ähnliches Problem und mir hat dies hier geholfen


    http://www.androidsnippets.com…t-between-android-and-php


    Tja und die Antworten deiner Requests (Anfragen) kommen dann ja sicherlich von einem PHP Skript und die kannst du ruhig in JSON verschicken.
    In Android lassen sich diese Sachen wunderbar verarbeiten.


    Um weniger Ärger mit den ganzen Netzwerkzugriffen zu haben, empfehle ich die Verwendung von "Volley" einem Framework von Google welches Dir in dem Berreich jede Menge Arbeit abnimmt.

    Aeh wenn schon der erhobene Zeigefinger dann bitte richtig:


    Zitat


    Caution: Android Studio is currently available as an early access preview. Several features are either incomplete or not yet implemented and you may encounter bugs. If you are not comfortable using an unfinished product, you may want to instead download


    Android Studio ist noch nicht fertig und wenn man mal bei Stackoverflow so sucht finden sich da noch jede Menge Probleme. Alleine schon in Verbindung mit CustomLibs (Actionbarsherlock ect pp) gibt es da immer wieder Schwierigkeiten.
    Das wird sicherlich in Zukunft besser werden, aber momentan würde ich auch noch eher an Eclipse festhalten.