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
Beiträge von 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
vor dem onCreate(Bundle savedInstanceState)
und erst in onCreate(Bundle savedInstanceState) das ErzeugenCodeergebnis = new AtomicBoolean(false); newActivity0 = new Intent(Login_main.this,MainActivity.class);
Schöne Grüße, schmyura -
Hallo UweApps,
irgendwas ist schief gelaufen........Zitatdie 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!CodeApp 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
der App bekannt machen, sie jedoch nicht erzeugen.
dann inCodeprotected 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 ItemClickListenerCodelistzumeintragen.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.Code
Alles anzeigenif (soll_gesten_beachten) { gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures); if (!gestureLib.load()) { finish(); } GestureOverlayView gestureOverlayView = new GestureOverlayView(this); if (!soll_gesten_spur) { gestureOverlayView.setGestureColor(Color.TRANSPARENT); } View inflate = getLayoutInflater().inflate(R.layout.activity_daten, null); gestureOverlayView.addView(inflate); gestureOverlayView.addOnGesturePerformedListener(this); setContentView(gestureOverlayView); }
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,
ZitatJetzt 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 übersetzen will, wird wie oben schon geschrieben, immer das englisch-amerikanische Datumsformat gesetzt.
Wenn man die Zahlen UND den Punkt haben will, so muss mansetzen.
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.ZitatWenn 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 ZeilenZitatListView preferencesList = new ListView(this);
preferencesList.setId(android.R.id.list);
gestureOverlayView.addView(preferencesList);einfüge vor dem
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.ZitatDas 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.
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 durchCodepublic 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.Code01-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 ichvor dem Aufruf der create-Methode
setzen und dann der gleiche Fehler
Code01-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
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 sindCodeprivate 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
Zitatwie soll eine activity kein layout haben?
das ist halt möglich, wenn man, wie ich schon beim Stellen der Frage geschrieben habe
Zitaterst 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....Zitater 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
-
Hallo ChampS,
da habe ich (Anfänger in Java und Android) wohl irgendwas nicht richtig verstanden...Zitatwenn das implementieren klappt musst du das auch nichtmehr
Wie kann ich denn
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
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,
Zitatalso 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, schymuraSmartphones: Google löscht Android-Applikationen aus der Ferne
-
Hallo Nikke1994,
als kleine Ergänzung zu dem Beitrag von killphil75Zitatdu 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:
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