Beiträge von killphil75

    Etwas wirr erklärt.. oder ???



    Wenn du einen CustomView hast und in diesem Parameter setzen möchtest bzw auch der "Umwelt" zur Verfügung stellen willst,
    dann benutzt man oft Getter und Setter Methoden . Get zum holen von Informationen und Set zum Setzen dieser.


    Wichtig ist das diese Methoden public definiert sind, damit man von "aussen" auf diese Methoden Zugriff hat.


    Zugriff erfolgt nach bekanntem Schema.



    supertollerCustomView cview=null;



    // View ansprechen



    cview = findViewbyId(R.id.deineViewID);


    if (cview !=null){


    cview.setStartwert(1500);
    cview.setEndwert(3000);


    }





    setStartwert und setEndwert wären dann zum Beispiel öffentliche Methoden in deinem CustomView

    XML Dateien sind nur Layoutdateien bzw. Datendateien


    Wenn du bestimmte Funktionalität kapseln willst kannst du das z.b.


    mit Fragmenten machen, wenn du es noch kleinteiliger willst kannst du Dir auch Customviews programmieren und da Funktionalität verbauen. Die
    Frage ist halt immer wie sinnvoll ist das.



    Wenn du etwas genauer umreissen könntest was du eigentlich machen willst, könnte man Dir eventl einen Tipp geben was du wie erreichst. Nur Tutorials anschauen und Samples versuchen zu kompilieren bringt in meinen Augen nix, wenn man die Grundlagen (in diesem Fall "Aufbau einer AndroidApp") nicht wirklich erfasst hat, das führt dann oft zu falschen Annahmen bzw. ganz komischen Ideen.




    Code
    Wenn ich mir jetzt ein paar neue Layout-XMLs anlege, kann ich diese auch außerhalb der MainActivity mit Code versehen?


    Ja zb. in Fragmenten


    Code
    Also für jede XML eine eigene neue Java Klasse worin ich dann Methoden für die jeweiligen OnClicks schreiben kann?


    Das wäre dann ein Fragment mit eigenen OnClicklistner

    stimmt, mein Fehler war natürlich andersrum


    import de.meinPaket.Name.R;


    Wichtig ist, das du in deinen Layouts die generierten Resourcen richtig einbindest


    xmlns:app="http://schemas.android.com/apk/res-auto", sonst findet er manche Sachen nicht
    z.B. selbst definierte Properties,




    Beispiel


    Code
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
    Zitat


    Also erstelle ich mir eine Klasse die einen Listener implementiert. Darin bekomme ich keine vernünftige R Instanz. Auch (wie es Eclipse mir empfiehlt) android.R bringt mich nicht weiter.



    R.meinkompletterPaketname


    Zitat

    Dachte ich kann mir R über den Context holen ...aber wie? Oder liege ich falsch?


    Aeh... da bringst du etwas durch einander Context ist keine Resource ... Context ist etwas was zur Laufzeit generiert wird. Der Rote Faden deines
    Programmes...


    Context wird durch eine Activity erzeugt -> Zugriff zB, per this


    innerhalb eines Fragments -> (nach onActivityCreated, weil vorher kein Context verfügbar ist, onCreateView ist also zu zeitig) -> getActivity


    oder getApplicationContext() wo immer du willst.

    Ja das haben sie mit Android 3 eingeführt. Alles was den Gui Thread ausbremst ist böse. Google wollte die Oberflaeche immer responsiv halten. Daher Netzwerkaktionen, lange Berechnungen, lange DB Zugriffe immer in einen Thread... kommunikation zum Gui per Handler. Oder einfacher per AsyncTask. :)

    Also ich hab mal folgenden Code bei mir reingehackt.



    mysql-connector-java-5.1.30-bin.jar


    Die LoginDaten sind jetzt nicht wirklich relevant (lokale NAS) (Testuser angelegt, DB mit Namen Test angelegt , 3 Felder id/name/testfeld int )
    Kleine Anmerkung:


    Da ich gerne für "alte" Geräte programmiere, hängt hier an meinem DEV-Rechner noch ein Samsung Galaxy 1 (9001), da läuft noch Android 2.3 drauf.


    Bei neueren Geräten also ANdroid 3 aufwärts dürfte es nötig sein, Datenbank operationen in einen eigene Thread zu kapsel. Zum Beispiel AsyncTask.


    Falls du ein Android 4+ Gerät hast, könnte das die Ursache für den Absturz sein. (Zum Testen kannst du natürlich auch den Strict Mode aktivieren).


    Achso Textview nur zur DummyAusgabe


    Zitat


    da sollte ich auch alle Rechte haben.


    Annahme oder Gewissheit ?


    Schau doch mal mit dem phpymyAdmin auf deine Nas und prüfe was root alles darf.


    Standard mässig habe ich für root nur lokalen Zugriff ( Synology NAS hat ja seit einiger Zeit MariaDB) drauf


    root 127.0.0.1 Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren
    root ::1 Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren
    root kpnas Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren
    root localhost Nein ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren



    Wie du siehst fehlt da der "any" Host Eintrag


    root % Ja ALL PRIVILEGES Ja Rechte ändern Rechte ändern Exportieren Exportieren



    Falls der nicht da ist, gibt es auch keinen externen Zugriff.


    Das ist natürlich nicht wirklich sicher bzw. macht auch so keinen Sinn, deswegen


    hätte ich da ein paar Anmerkungen:


    Bei einer Android App, kann ja immer maximal eine Person angemeldet sein.
    Diese Daten in einer Datenbank zu speichern ist vielleicht etwas zu viel Overhead.
    Zum Speichern einzelner Wert,Value Paare gibt es unter Android die SharedPreferences


    http://developer.android.com/r…nt/SharedPreferences.html


    Wie im ersten Post beschrieben, wird es immer notwenig sein den "User" eindeutig zu identifizieren. Das heisst in der Kommunikation mit dem Server muss ich mich immer authentifizieren.


    Wenn ich mich beim Server anmelde -> sende ich einen Request -> Name/Passwort -> Als Rückmeldung vom Server bekomme ich die Eindeutige ID der Datenbank zurück und ein OK - in allen anderen Fehler gibt es entsprechende Fehlermeldungen (Falsches Passwort, User nicht gefunden bitte registrieren, ect pp)


    -> Um nicht jedes Mal das Loginprozedere neu zu vollziehen, kann ich dem User anbieten - in der app eingeloggt zu bleiben.


    -> in den Sharedprefs kann ich mir dann ein Feld : loggedIn = true setzen, weiterhin userid= rückgabeid der DB, username= , passwd=


    -> sobald ich in der app mal auslogge, setzte ich diese Werte zurück und ein erneutes Login/Anmelden ist notwendig.


    -------------------------------
    Mit diesen Daten kann ich jetzt super mit dem Server kommunizieren. (siehe erster Post)


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


    Der 2te Schritt wäre die Anmeldung an eine Session:


    Das würde ja analog verlaufen -< User Daten an Server schicken <- in die Response packe ich eine freie Spiel-Session ID


    -> diese Speichere ich mir wieder in den Shared-prefs: sessionloggedin = true / sessionid = xxx


    Jede Kommunikation die ein Session betrifft (also jede spielinteraktion) bekommt alle Daten mitgeschickt,


    userid, sessionid, passwort -> auf der Serverseite muss ich natürlich trotzdem immer den Gegencheck machen und bei Bedarf den User informieren:


    -> Login Daten prüfen -> wenn alles IO dann weiter zur Sessionprüfung -> Fehler Daten Falsch/ Abbruch


    -> Sessionprüfung: -> ist Session überhaupt noch existent oder Spiel bereits beendet/(abgelaufen
    -> ist der User überhaupt Teil der Spielsession ?


    -> Ja ? -> dann Interaktion ausführen.


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


    Bei Android-Hive gibt es ein paar Seiten später noch ein Tutorial zur CRUD Kommunikation pers JSON/PHP.
    So eine Schnittstelle müssen Sie für Ihr Spiel Backend schreiben. Der Knotenpunkt wo alle App Kommunikation aufläuft.

    Der User muss sich natürlich in deine App auch einloggen können...



    Bsp:


    User startet App -> User kann sich an der Datenbank anmelden oder ein neues Login erstellen


    -> Neues Login: User gibt Name / gwünschtes Passwort ein -> Daten werden an die Benutzerdatenbank geschickt und dort gespeichert.
    in deiner App speicherst du die Logindaten ebenfalls (falls gewünscht), normalerweise schickt man hier keine bzw nur einmalig "Klardaten" (Text) hin und her, weil das HTTP Protokoll ausgelsen werden kann -> stichwort Verschlüsselung
    (in den Beispielen von AndroidHive wird da nicht eingegangen -> einfach mal bei Google danach suchen - da gibt es einige Beispiele -> Java php crypt hash
    -> Rückgabe der User ID an App und Speicherung in Sharedprefs, oder wie auch immer


    Hier ein schönes Beispiel:


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



    ------------
    Nun der Teil deiner Frage: Nutzererkennung.


    -> Bei jeder Datenbankaktion schickst du nun diese Userdaten einfach mit, auch hier sollten die Daten verschlüsselt sein. Passwörter gehashed.


    Auf der Serverseite (php) -> entschlüsselst du die Daten wieder und prüfst du nun als erstes ob die mitgeschickten User Daten valid sind , wichtig hier ist auch immer eine Rückmeldung an deine App zu senden, damit der User weiss was los ist.


    -> Benutzer in der Datenbank -> nein -> Rückgabe Fehler "User nicht gefunden"
    -> Ja ist er -> Prüfe Passwort -> falsch -> Rückgabe Fehler "Falsches Passwort"
    -> Ok Daten sind Ok -> Query ausführen ->
    Buchverleihe an Hans -> das ist ja eine n:m Beziehung und würde über eine Kreuztabelle zu realisieren sein. ( user_id, buch_id, Ausleihdatum, Frist)


    Rückmeldung an App -> Einfache Ok-meldung oder sogar Rückgabe von Datenpaket

    Super wenn Leute immer Hilfe wollen und nicht mit dem Quelltext um die Ecke kommen. In 99,9 Prozent der Fälle liegt der Fehler im Quellcode.


    Woher soll ich wissen, was du als "normal" bezeichnest ???


    Ich lese das auch normal aus und bei mir funktioniert es. ... So und nun ist niemanden geholfen.



    Java
    String mystring = getResources().getString(R.string.meineIP);
    		Log.d("test", mystring);



    und das zeigt mir


    192.168.178.111



    string.xml

    Java
    <string name="meineIP">192.168.178.111</string>