Beiträge von schymura

    Hallo Nikke1994,
    leider gibst du sehr wenig Information.
    So ist nicht klar, ob du überhaupt die richtigen Daten (Passwort etc.) hast, um auf die Webseite mit WebView zuzugreifen.
    Du bist dir sicher, dass dein Passwort und die Adresse richtig sind?
    Fast du schon mal mit nem Browser die Verbindung überprüft, oder mit nem Ping? Könnte ja sein, dass der Server gerade unten ist.....
    Kläre doch erstmal diese einfachen Dinge ab.
    Schöne Grüße, schymura ;)

    Hallo Nikke1994,
    du wirst schon deine Gründe haben, warum du so viel "globale Variablen" verwendest.
    Aber warum willst du sie unbedingt fertig erzeugen, ehe denn die ganze Activity erzeigt wurde???
    was hätst du von

    Code
    public static AtomicBoolean ergebnis;
    public Intent newActivity0;


    vor dem onCreate(Bundle savedInstanceState)
    und erst in onCreate(Bundle savedInstanceState) das Erzeugen

    Code
    ergebnis = new AtomicBoolean(false);
    newActivity0 = new Intent(Login_main.this,MainActivity.class);


    Schöne Grüße, schmyura ^^

    Hallo UweApps,
    irgendwas ist schief gelaufen........

    Zitat

    die Version deiner Datenstruktur würde ich als Versionsnummer einfach im App-Code speichern und als Parameter an das PHP-Script übergeben - dann muss dein PHP-Script nicht erst eine Liste von App-Versions-Nummern oder -Codes abklappern.

    Ich hatte nur festgestellt, dass die Antwort von antifish auf die Frage von Laire gut ist. Ich finde ihn nur noch erweiterbar.
    Dazu schlug ich vor einen Hash von der AndroidManifest.xml zu erzeugen. Dass diese Zeichenfolge dann in der App vorhanden sein muss versteht sich ja wohl von selbst, denn nur so ist sie ja an den Server, auf dem PHP laufen sollte, mit zu übersenden.
    Wenn dann der richtige Hashstring (verschüsselt oder nicht) auf dem Server ankommt, dann ist eindeutig klar, dass die Anforderung von der App auf irgendeinem Smartphone kommt.
    Dein weitergehender Vorschlag ist auch nicht schlecht!

    Code
    App fragt PHP nach Zugangscode und erhält einen Zufalls-String (diesem auf dem Server kurzzeitig speichern)


    Ich würde nicht den Zufallsstring kurzfristig auf dem Server Speichern, sondern nur einen Hash darauf. Wenn dieser Hash dann bei der weiteren Dateanforderung wieder an den Server gesandt wird ist alles gesichert. Aus einem Hash lässt sich nie wieder die ursprüngliche Zeichenfolge erstellen.
    Das setze ich zumindest ein um über Captcha von einer Webseite aus festzustellen, ob es ein Webrobot ist, oder eine Mensch. Außerdem hat dies dann noch den Vorteil, dass man bei gleicher IP-Adresse auch noch die unterschiedlichen Captcha den verschiedenen Usern zuordnen kann, ohne einen riesigen Speicheraufwand (IP, Browser, Betriebssysttem etc.), der ja sonst nütig wäre, wenn sich eine WG hinter der IP steht oder gar ein Proxy.
    Schöne Grüße, schymura ^^

    Hallo Nikke1994,
    die Lösung von titus ist schon richtg.
    Wenn du unbedingt eine "globale Variable" pef haben muss, dann kannst du sie vor Erzeugen der Applikation

    Code
    protected void onCreate(Bundle savedInstanceState) 
    {   
      ...
    }


    der App bekannt machen, sie jedoch nicht erzeugen.

    Code
    public SharedPreferences pref;


    dann in

    Code
    protected void onCreate(Bundle savedInstanceState) 
    {   
      ...
      pref = getApplicationContext().getSharedPreferences("IservApp", 0); 
    }


    Dann gibt es auch keinen Fehler mehr.
    Schöne Grüße, schymura ^^

    Hallo,
    wieder habe ich ein kleines Problem mit den Gesten im meiner App. Diesmal habe ich eine ListView, die beim Start der Activity noch leer ist.
    Ich setze einen ItemClickListener

    Code
    listzumeintragen.setAdapter(liesteadapter); 
    listzumeintragen.setOnItemClickListener(new OnItemClickListener()
    {
    	@Override
    	public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
    	{
    		berechnenButton.setEnabled(true);
    		Schaltmenue();
    	}			
    });


    Danach binde ich dann, wenn der User das so möchte, das Erkennen und Reagieren auf Gesten ein.


    Steht nun boolean soll_gesten_beachten auf false, dann wird auch immer der setOnItemClickListener() ausgeführt.
    Ist boolean soll_gesten_beachten jedoch true funktioniert alles in der Aktivity, Listeneinträge werden hinzugefügt oder gelöscht und so weiter, auch der ausgewählte Listeneintrag ist richtig markiert, aber der setOnItemClickListener() wird nie ausgeführt, obwohl der Punkt im ListenItem anzeigt, dass etwas geschehen ist und das GestureOverlayView() die Aktion weiter gegeben hat.
    Welchen Fehler mache ich und wie kann ich es erreichen, dass der setOnItemClickListener() auch im GestureOverlayView() ausgeführt wird?
    Fragende, etwas ratlose Grüße,
    schymura ?(

    Hallo Laire,

    Zitat

    Jetzt bräuchte ich eine Idee, wie ich sicher gehen kann, dass nur die App die Daten herunterlädt und diese nicht einfach abgerufen werden können.

    Den Vorschag von antifish finde ich gut.


    Außerdem würde ich in der App auch noch einen Hash (MD5 oder SHA1) über die AndroidManifest.xml einbauen.
    Dann könnte ich auf der Serverseite über PHP nicht nur feststellen, dass die Anforderung von meiner App stammt, sondern auch welche App Version es ist, falls ich man Änderungen der Struktur der zu übersendenden Daten vornehmen......
    Schöne Grüße, schymura :)

    Hallo,
    noch ein kleiner Nachtrag:
    In einer "PreferenceActivity" funktioniert das normale Setzen der Eingabeart für ein Datum für "EditTextPreference" nur, wenn man es in der XML-Datei mit "android:inputType="date"" setzt.
    Wenn man es im Programmcode über

    Code
    setInputType(InputType.TYPE_CLASS_DATETIME)

    setzen will, wird wie oben schon geschrieben, immer das englisch-amerikanische Datumsformat gesetzt.
    Wenn man die Zahlen UND den Punkt haben will, so muss man

    Code
    setInputType(InputType.TYPE_CLASS_DATETIME |InputType.TYPE_DATETIME_VARIATION_DATE);

    setzen.
    Dann klappts auch mit dem Nachbarn.....
    Schöne Grüße, schymura ;)

    Hallo Lucas de Vil,
    nochmals danke, vor allem Dingen nun auch für die Erklärung.

    Zitat

    Wenn es keine View gibt bzw. diese nicht explizit gesetzt wurde, dann wird die Überprüfung sicherlich zur Vermeidung von NullPointerExceptions gar nicht erst durchgeführt.

    So kann es sein......
    Dann kann ich ja meine erste App in den nächsten Tagen wirklich bis zur Version 1.0 bringen.....


    Danke an Alle und schöne Grüße, schymura :)

    Hallo Lucas de Vil und ChampS,
    nochmal danke für die Antworten.


    Lucas de Vil :
    Zwar verstehe ich nicht, was da läuft und vor allem, warum es läuft, wenn ich 3 von deinen Zeilen

    Zitat

    ListView preferencesList = new ListView(this);
    preferencesList.setId(android.R.id.list);
    gestureOverlayView.addView(preferencesList);

    einfüge vor dem

    Code
    setContentView(gestureOverlayView);


    dann funktioniert es fehlerfrei.......
    An was das dann nun liegt ist mir immer noch nicht klar, das passt aber hier sehr gut in die Bastelecke.......
    Danke allen, schymura ^^

    Hallo Lucas de Vil und ChampS,
    danke für eure Antworten.

    Zitat

    Das liegt daran, dass PreferencesActivity als Subklasse von ListActivity zwingend ein ListView mit passender ID benötigt.

    Ich verstehe nicht ganz, warum PreferencesActivity das ListView nicht benötigt, wenn man alles für die Gesten einbauen kann, jedoch nur vor das Setzen der OverlayView die Zeile auskommentiert.

    Code
    //   	setContentView(gestureOverlayView);


    Es kommt übrigens bei den beiden Preferenzbeispielen PreferencesFromCode und PreferencesFromXml aus den ApiDemos zu den gleichen Fehlern, wenn man dort die Gesten einbaut.
    Das scheint also dann doch mehr an OnGesturePerformedListener zu liegen, nicht an PreferencesActivity .
    Oder deneke ich da falsch?
    Fragende Grüße, schymura ^^

    Hallo Lucas de Vil,
    ja, ich habe da einen Listadapter am Laufen, dfen ich aber nicht erzeugt habe, sondern der allein schon durch

    Code
    public class EinstellungenActivity  extends  PreferenceActivity implements OnPreferenceChangeListener, OnGesturePerformedListener {


    diese Zeile erzeugt wird.
    Da dann der GestenLiustener anscheined eine Liste voraussetzt in einer PreferenceActivity hab ich ja auch die Frage gestellt, wie man es machen kann mit den Gesten ohne Layout.xml.
    Jede andere Activity laäuft so, nur halt die PreferenceActivity nicht.


    Über PreferenceActivity nachdenkende Grüße, schmyura ?(

    Hallo Lucas de Vil,
    hast ja Recht, hatte ich nicht gemacht, Schusseligkeit von mir.

    Code
    01-15 16:37:07.359: D/AndroidRuntime(1372): Shutting down VM
    01-15 16:37:07.359: W/dalvikvm(1372): threadid=1: thread exiting with uncaught exception (group=0x40018578)
    01-15 16:37:07.359: E/AndroidRuntime(1372): FATAL EXCEPTION: main
    01-15 16:37:07.359: E/AndroidRuntime(1372): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.schymura.biorhythmus/com.schymura.biorhythmus.EinstellungenActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'


    Das ist die Fehlermeldung, wenn ich

    Code
    setContentView(gestureOverlayView);

    vor dem Aufruf der create-Methode

    Code
    PreferenceScreen createPreferenceHierarchy()

    setzen und dann der gleiche Fehler

    Code
    01-15 16:37:07.359: W/dalvikvm(1372): threadid=1: thread exiting with uncaught exception (group=0x40018578)
    01-15 16:37:07.359: E/AndroidRuntime(1372): FATAL EXCEPTION: main
    01-15 16:37:07.359: E/AndroidRuntime(1372): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.schymura.biorhythmus/com.schymura.biorhythmus.EinstellungenActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'


    wenn ich sie erst danach aufrufe.
    Schöne, hoffende Grüße, schymura :)

    Hallo Lucas de Vil,
    habe deinen Vorschlag (natürlich) sofort getestet.
    Ergebins: App-Absturz, genau als wenn ich dem setContentView() irgend eine falsche View untergeschoben hätte.
    Lasse ich die Zeile

    Code
    setContentView(gestureOverlayView);


    weg, so geht es fehlerfrei, aber halt auch ohne Gestenerkennung....
    Vielliecht sollte ich noch schreiben, dass es sich bei der Activity um eine PreferenceActivity handelt.
    Und ob ich den Aufruf der create-Methode vor oder nach dem setContentView mache ist völlig egal....
    Die ersten 3 Zeilen der create-Methode sind

    Code
    private PreferenceScreen createPreferenceHierarchy() {
    PreferenceScreen roots = getPreferenceManager().createPreferenceScreen(this);	
    setPreferenceScreen(roots);


    Aber das kann es eigentlich nicht sein, meine ich.......
    Schöne, fragende Grüße, schymura ?(

    Hallo ChampS

    Zitat

    wie soll eine activity kein layout haben?

    das ist halt möglich, wenn man, wie ich schon beim Stellen der Frage geschrieben habe

    Zitat

    erst alle Objekte im Activitycode zur Laufzeit erzeugt werden

    keine Layout Datei (xml) für die Activity hat, sondern das Layout wenn du so willst, erst im Code der Activity erzeugt, indem man dort die einzelnen Objekte beim Erzeugen auch positioniert.


    Den von dir geposteten Link habe ich vollständig, so weit es meine sehr ungenügenden Englisch-Kenntnisse zu lassen, durchgearbeitet.


    Schöne Grüße, schymura ^^

    Hallo ChampS,
    danke für den Link, den hatte ich jedoch auch schon durchgetestet....

    Zitat

    er benutzt dann das gesetzte activity layout soweit ich weiß.

    Ja, das ist das Problem.... Was also wird genutzt, wenn es kein Activity Layout gibt?
    Ein falsche Layout, also zum Beispiel das einer anderen, in der App vorhandenen Activity kann man zwar einbinden, jedoch fürht es beim Laufen zu einem Absturz.


    Weitere erwartungsvolle Grüße, schymura :-X

    Hallo ChampS,
    da habe ich (Anfänger in Java und Android) wohl irgendwas nicht richtig verstanden...

    Zitat

    wenn das implementieren klappt musst du das auch nichtmehr

    Wie kann ich denn

    Code
    View inflate = getLayoutInflater().inflate(R.layout.activity_info_main, null);


    einfügen, wenn ich kein Layout habe, aber GestureOverlayView das Layout braucht, damit er Gesten über Schalter und so weiter nicht beachtet?
    Falls es dir nicht zu viel ist, dann mach mir das doch bitte über 1,2 Quelltextzeilen klar.
    Erwartungsvolle Grüße, schymura ^^

    Hallo ChampS,
    danke schon mal für die Antwort.
    Aber leider habe ich ja das Problem, dass ich

    Code
    View inflate = getLayoutInflater().inflate(R.layout.activity_info_main, null);


    diese Zeile ja in einer Activity, die keine Laylouy-Datei besitzt nicht in die "gestureOverlayView" einfügen kann.....
    Weitere erwartungsvolle Grüße, schymura ^^

    Hallo ChampS,

    Zitat

    also wenn die Systemsprache auf Deutsch ist zeigt es ein deutsches Datumsformat an

    also, wenn es das täte wäre es ja schön. Leider funktioniert dies nur in "normalen" EditText Objekten so wie du es schreibt.
    In einem "EditTextPreference" in einer "PreferenceActivity" ist das aber leider nicht der Fall......
    Dennoch schöne Grüße, schymura :S





    Smartphones: Google löscht Android-Applikationen aus der Ferne

    Hallo Nikke1994,
    als kleine Ergänzung zu dem Beitrag von killphil75

    Zitat

    du müsstest mal schauen wie die css datei auf der Schulseite heisst

    die (Schul-) Seite einfach im Browser aufrufen, auf "Azeigen Quelltext" klicken und schon findest du die Angabe im Kopf der Seite, zum Beispiel:

    Code
    <link rel="stylesheet" type="text/css" href="_private/Homepage.css">


    Schöne Grüße, schymura ^^

    Hallo James 007,
    ich hatte wirklich nicht begriffen, dass du einfach nur einen Screenshot einer beliebigen App machen möchtest.
    Dafür nutze ich eigentlich immer die eingebaute Screenshot-Funktion im Smartphone.


    Wenn ich von einer App aus den Screen der App einfangen möchte, um ihn als Bitmap zu haben (hat ich in Realität noch nie gemacht) dann würde ich mir vorher für den entsprechenden Bereich ein Bitmap (sehe oben) erzeugen, und es dann zur entsprechenden Zeitpunkt nutzen. Vermutlich über eine clip(irgendwas) Methode
    Schöne Grüße, ^^ schymura