Beiträge von CdWechsler

    Hallo an alle und danke für die posts,


    also was ich am code von lucas nicht verstanden habe ist "Song".


    wenn ich das so übernehme steht beim List<Song>: Song cannot be resolved to a type
    keine ahnung wie ich das fixe (sry, aber ich muss noch einiges lernen :) ), aber egal, den prinzip habe ich verstanden. wobei wenn das letzte element von itemscopy beispielsweise eine 5 wäre, welches dann gelöscht wird dann wäre itemscopy = 0. somit wäre die if-bedingung erfüllt und itemscopy bekommt alle elemente von allitems zugewiesen, welches dann zufällig gemischt wird. dann wird wieder das 1. element genommen, welches aber auch die 5 sein kann. d.h. es wäre dann 2 mal hintereinander gezogen worden. naja... wenn das alle 5 schritte passieren kann ist das nicht so tragisch. aber zurück zum code: wie gesagt, ich habe das mit der methode Song nicht so verstanden und habe das dann so gemacht um zu checken, ob keine gleichen zahlen hintereinander aufgelistet werden:



    so, normalerweise sollte es mir 16 zahlen zurückgeben. was ich bekomme ist aber seltsamerweise das hier:


    Code
    1
    1
    1
    1
    1
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    	at java.util.ArrayList.rangeCheck(Unknown Source)
    	at java.util.ArrayList.remove(Unknown Source)
    	at Main.main(Main.java:32)


    NACHTRAG:


    upss, habe die klammer falsch gesetzt :-[ :-[ (peinlich peinlich)

    Guten morgen,


    ich stehe etwas auf dem Schlauch, um eine Zufällige Zahl aus einem int[5] array ohne wiederholung zu generieren. Bei nur 5 Zahlen kommt es schon oft vor, dass die gleichen Zahlen hintereinander gewählt werden. Dann dachte ich mir die generierte zahl zwischen zu speichern um bei der nächsten generierung diese mit der neu generierten Zahl zu vergleichen. Falls diese dann gleich sein sollten, sollte dann so lange eine zahl generiert werden, bis diese sich mit der zwischen gespeicherten unterscheidet. Aber das würde eventuell auch länger dauertn, weil wie gesagt, kam es schon vor, das die gleiche zahl 4-5 mal hintereinander gewählt wurde. Das wäre also keine optimale lösung. Hat jmd. da vielleicht einen Tip??
    So weit bin ich momentan:

    Code
    Random r = new Random();
    int i;
    int [] arrayList   = {13,32,44,33,99};
    i = arrayList[r.nextInt(arrayList.length)];


    danke im Voraus

    Hallo an alle,


    also bis vor ein paar Tagen hat der Geocoder noch schön die adressen ausgegeben. Seid gestern als ich meine app unterwegs getestet habe, bekam ich plötzlich keine adressen mehr angezeigt. Das hatte mich doch sehr gewundert. Am Code habe ich nichts verändert gehabt. Ist auch das gleiche Smartphone mit der gleichen os-version. Nun, jetzt sitzte ich seid einer stunde vor dem rechner um nachzusehen, ob am code doch was nicht stimmt. Aber der code ist vollkommen ok (ist halt der selbe wie vor einigen tagen, wo es gefunzt hatte). Habe log-ausgaben eingetragen und bekomme nun die Service not available meldung. Ist das ein service was offline ist, oder was soll das sein?? Weil, wie gesagt, ich habe NICHTS gemacht und plötzlich geht es nicht mehr. das kann doch nicht sein. ;( :(


    Habe ein wenig gegoogelt und es scheint ja kein unbekanntes problem zu sein. Muss ich jetzt den code ändern?? Warum hat es dann noch vor kurzem geklappt?? ey sowas kann so früh am morgen doch recht einen aufregen ... :evil:

    Also ich zitiere mal aus einem Buch:

    Man kann beide Karten nutzen. Ich habe es mal mit osm versucht und auch hingekriegt und nun auch mit google maps v2. Wie im Zitat steht braucht man für die Nutzung des google maps einen API-KEy. Diesen bekommst du bei googel-apis-console. Dafür brauchst du wiederum einen google-account. Dort wird ein key generiert, indem du einen SHA1-Zertifikat Fingerabdruck und dem paketnamen deines android-projektes einträgst. Diesen key musst du dann in die manifest.xml eintragen etc. etc. etc.
    hier gibt es eine step-by-step anleitung:

    HTML
    http://android-er.blogspot.de/2012/12/a-simple-example-using-google-maps.html


    HTML
    https://developers.google.com/maps/documentation/android/


    Dort stehen auch die Bedingungen für die Nutzung von GoogleMaps.
    Für mich war es am Anfang voll kompliziert, bis man das alles konfiguriert hat und so... voll der Film. Bei OSM machst du solche sachen nicht und benötigst lediglich nur eine Bibliothek des kartenmaterials. Da gibt es halt z.b. mapsforge, osmdroid... Von der Implementierung her war es für mich für die darstellung einer karte mit osm vieeeel einfacher. Der Aufwand ist auf jeden fall geringer (meine meinung). Bei osm brauchst du soweit ich weis keine lizenz. Musst du auf jeden mall testen. Mal mit osm und mal mit google maps v2 um selber einen Eindruck zu gewinnen. Im Internet gibt es etliche (video-)tutorials.


    Zitat

    Wie berechnet man bei Vektorkarten was und wie man den Kartenauschnitt(Tiles) anzeigt?

    was für berechnungen meinst du?


    grüße

    Also ich habe folgendes mal ausprobiert. Wie ihr bereits gesagt habt, habe ich in der onLocationChanged()-Methode viel zu viele aufgaben bzw. aufrufe gehabt, die so oft wie möglich durchgeführt wurden. der UI-thread war daher zu sehr ausgelastet und deshalb ziemlich laggy. Habe daher einiges in AsyncTasks eingebaut um den uithread zu entlasten bzw. das diese dann auch parallel laufen. die updates sollten zudem alle 6 sekunden gemacht werden. Bin dann etwas durch die gegend gecruiset um zu testen, ob es immer noch laggy ist. Und siehe dar, es funzte diesmal ziemlich gut und viiieeel flüssiger. Das Resultat hat mich sehr erfreut. Zudem muss ich sagen, dass asynctasks generell doch eine bessere Variante sind als threads. Mit besser meine ich jetzt die IMplementierung. Finde ich einfacher :) . Ich werde es mal noch den Mediaplayer in einen service packen. vielleicht kann man von der effizienz noch etwas mehr rausholen. Danke auf jeden fall für die tipps, ratschläge und hilfsbereitschaften. Alter.. ihr seid die besten. (yippi ya yeah) ;)

    Hallo leude,


    danke für eure posts :)


    Also den MediaPlayer als Service zu nutzen ist wahrscheinlich eine bessere Idee. Müsste mich mal in Services reinarbeiten. Und der Mediaplayer greift auf ressourcen-interne datein zu. Also kein musikstreaming aus dem internet oder sowas und auch kein zugriff auf sdcard-datein. Habe jetzt grob nur zum testen im res/raw-ordner ein paar Musikstücke (10 tracks) gepackt, auf die der Mediaplayer zugreift. Aus dem Internet hole ich mir lediglich nur Umfeldinformationen. In welchen Abständen diese Abfragen gemacht werden, hängt von der Einstellung der requestLocationUpdates()-Methode ab. Am anfang hatte ich es halt auf 0 gesetzt, d.h. jede Sekunde eine Anfrage. Ok, das war eigentlich nicht nötig und überlüssig zugleich, weil die App sozusagen erst Musikstücke automatisch abspielt, wenn die Informationen aus dem Netz abgerufen wurden. Und wenn ich am einem Punkt verharre, ist es auch nicht nötig die gleichen parameter aus dem Netz zu ziehen. Daher habe ich jetzt minDistance eingestellt (werde ich später mal testen :) ).


    @lucas:

    Zitat

    Navigon und Konsorten rufen die Ortsbestimmung ab, doch das geschieht über Location Services, nicht über das Internet.

    das tue ich doch auch. Also kein Internet. Daher habe ich mich doch gewundert.


    Aber das du folgendes gemeint hast ist doch ein interessanter Punkt:

    Klingt eingentlich nachvollziehbar und logisch. Weil aus einem Buch habe ich entnommen, dass der stromverbrauch auf ein maximum ist, wenn die werte auf 0 gesetzt sind, weil die aktuelle position so oft wie möglich gegeben wird. Jetzt wird mir doch einigeres deutlicher ;)


    danke danke danke. Ich werde es mal ausprobieren und poste meine resultate ;)

    Hallo schymura,


    da wir jetzt von der onlocationchanged()-Methode reden, wie würde denn diese reagieren, wenn ich in die lochationmanager.requestLocationUpdates(provider, 0, 0, locationlistener) - methode für die erste null 6000 und für zweite 30 eintrage? die 1. zahl ist ja long minTime (in millisekunden). die 2. float minDistance (in metern). Wenn ich jetzt nur die 6000 eintrage, dann reagiert der locationmanager alle 6 sekunden. Wenn ich nur die 30 eintrage alle 30 meter. Und was passiert wenn ich beides eintrage? Wird dann gecheckt, welches der beiden zutrifft?

    hally schymura,


    danke für deinen post. Ne ne... ich habe mich falsch ausgedrückt. was ich sagen wollte ist, dass die app generell musik abspielt als auch den standort über eine karte anzeigt. der standort wird natürlich über onLocationChanged() aktualisiert, das ist standart :) . Was ich sagen wollte ist, das wenn die app läuft, 1. der standort über eine karte angezeigt zudem 2. musik abspielt und 3. eine internetabfrage gemacht wird. Alles parallel. ich nutzte auch eine swipeview, womit ich zwischen zwei ansichten, indem fall einer karte und einem mediaplayer, wechseln kann. der mediaplayer enthält auch eine seekbar, welches beim abspielen eines musikstückes sich bewegt. wie gesagt, geschieht das alles parallel. Daher ist mir auch klar warum das so rechenintensiv ist. Aber bestimmt könnte man hier und da noch etwas schleifen.

    Ich habe eine generelle Verständnisfrage. Und zwar, ist es ressourcenfreundlicher und effizienter bei der implementierung einer App, wenn man extra Klassen für Methoden (es sind jetzt nicht alle Methoden gemeint) erstellt (also die aufgaben in klassen aufteilen)? Also ich habe nämlich eine App programmiert, die aus 9 Klassen besteht. Eine der Klassen ist die MainActivity. Diese enthält die meisten Methoden. Die app nutzt einen Mediaplayer bzw. google maps v2 für eine ortsbestimmung, gesteuert alles durch die MainActivity. Hinzukommt, dass aus der MainActivity ein Thread im hintergrund parallel ausgeführt wird (für internetabfragen und zwar jede sekunde, da ich requestLocationUpdates auf 0 gesetzt habe, jetzt habe ich aus auf 5 sekunden eingestellt). Das ist sehr rechenintensiv und nutzt viel energie, was verständlich ist. Aber es gibt andere Apps, wie z.b. navigon, welches auch jede sekunde die ortspositionen aktualisiert, warnungen gibt etc. etc. Solche apps laufen ziemlich gut und flüssig auf meinem smartphone. Und obwohl ich für das Testen meines apps auch den Galaxy S2 nutze, dessen Rechenleistung ziemlich gut ist, laggt es wie sau. Daher meine Frage. Kann das daran liegen, das alles aus der einen Klasse gesteuert wird oder macht das keinen unterschied? Kann natürlich auch an meiner Programmierung selbst liegen. Ich bin ja nicht so der programmier-experte (das habt ihr bestimmt an meinen erstellten themen bereits festgestellt :) ) und weiß daher nicht ob ich das so gut hingekriegt habe. Funktionieren tut es zumindestens, aber ist halt seeeehr rechenintensiv was das interagieren mit dem user beeinträchtigt. Wie könnte man dagegen vorgehen? Gibt es eventuell irgendwelche Tipps, tutorial etc. für die Programmierung der oben genannten Funktionen, die die Rechenleisung nicht auf ein maximum stellen?


    Danke im Voraus

    @Lucas:
    Stimmt, du hast recht. Habe ich völlig vergessen. Die Threads werden ja parallel im Hintergrund ausgeführt, während der UI-Thread weiter macht. Wenn ich den blockieren würde, bis die Threads abgearbeitet und geschlossen wurden, wäre das keine gute Lösung. ok... dann mache ich das mal anders. Eine andere Frage: ich dachte mit dem handler ein callback-mechanismus implementiert zu haben!? (siehe code: handler.post(new Runnable() { ... }); ). Könntest du mir einen Beispiel geben wie du das gemeint hast? (allgemein gefragt)


    @block
    ah ok. Gut zu wissen. danke :)

    @lucas de vil


    ne ne, ich nutze keine weiteren bool-werte. zuweisung ist schon richtig. aber bekomme nicht du gespeicherten werte, hmm... !?


    schymura


    ne das bringt nichts. habe doch vorher geschrieben, dass ich mit log-einträgen gecheckt habe, was für werte aufgerufen werden. es sind false werte :(


    Also ich weiß nicht ob ich zu kompliziert denke, aber was ich will ist nur bool-werte die über einen thread festgelegt werden in einer anderen klasse speichern. Auf diese klasse bzw. werte, möchte ich dann aus der Mainactvity zugreifen können.


    Ich bin bis jetzt folgendermaßen vorgegangen:


    Die onCreate()-Methode der MainActvity (rest ist egal):



    Thread


    die klasse wo die bool-werte gespeichert werden:



    Könnte jmd. eine simples beispiel eventuell posten, wo man über der oncreate()-methode der mainActivity einen thread ausführt, der eine url nach dem status ceckt und das ergebnis als bool-wert in einer separaten klasse speichert und letztendlich an eine textview übergibt? man könnte dafür die meisten codes von oben verwenden. ich danke im voraus für die hilfen und ratschläge



    block_
    habe dein post gerade gelesen. Ähm.. ja genau so sieht es aus :)
    Aber wie können die werte false sein? diese werte gebe ich doch über den thread? bei der deklaration habe ich zumindestens keine werte zugewiesen (siehe code). wie sollte/könnte man das dann lösen?

    Ich habe probleme mit boolean werten. Und zwar überprüfe ich in meinem android projekt über ein thread den onlinestatus zweier url's. der thread wird über die MainActvity.onCreate()-methode ausgeführt. im thread wird ein boolean attribut auf false gesetzt, wenn der url's nicht erreichbar sind, sonst true. diesen wert gebe ich dann an eine klasse weiter, die die boolean-werte speichert (get-set methoden). ich habe es mit log-einträgen überprüft, welches mir stets die richtigen werte nach der übergabe angezeigt hat. wenn die server aber nicht online sind, dann soll es eine nachricht ausgeben. dazu habe ich in der MainActvity.onCreate()-methode (nach den try-catch-blöcken) eine if-bedingung eingeführt, die folgendermaßen aussieht:


    Code
    if(!ServerOnlineCheck.isServerAisOnline() && !ServerOnlineCheck.isServerBisOnline()) {
    			showServerUnreachableMessage();
    		}


    und obwohl die server online sind und auch über den log-eintrag die gespeicherten boolean-werte true sind, wird die showServerUnreachableMessage(); ausgeführt. habe dann davor auch log-einträge gemacht um zu sehen was für boolean-werte gespeichert sind bzw. von der if-bedingung aufgerufen werden und es sind false werte. wieso sind die false? Die true false-werte werden nur über den thread übergeben. über logeinträge sehe ich dass diese ture sind und später dann false. (kopfkratz) :-/


    kann mir das einer erklären?? Ich raffe das nicht :/


    danke im voraus

    ne, also auf dem htc funzt es auch nicht (würde mich auch wundern). also ich bin mit meinem latain am ende. ich habe alles mögliche von der mainactivity entfernt (eigentlich unnötig aber egal), sodass ich nur noch die onCreate und die anderen zwei mehtoden habe. Berechtigungen sind auch gesetzt. Du hast den code getestet und es geht, d.h. es müsste dann auch bei mir gehen, was es aber nicht tut. :( ?( ich weiß ehrlich nicht weiß ich falsch mache, habe inzwischen auch ein neues projekt erstellt um nur connection zu testen. das gleiche resultat. Killphil75, könntest du freundlicherweise mir mal dein projekt schicken oder hochladen, womit du die connection geprüft hast? das wäre echt korrekt

    ich teste es auf meinem galaxy s2 (android-version 4.1.2). Hmm... das ist echt merkwürdig. Kann es an meinem smartphone liegen?? ich habe nämlich mal ein problem gehabt, dass ich ein anderes projekt auf meinem galaxy getestet habe, welches fehlerhaft war. es lag aber nicht am code. ich habe gegrübelt und gegrübelt, bis ich es auf einem htc mit der version 4.1.1 getestet hatte. un da hat es fehlerfrei gefunzt.


    irgendwie ergibt das für mich keinen sinn, aber ich werde es mal testen.