Beiträge von Marco Feltmann

    Ich kenn mich mit Java auch nicht so gut aus.


    Ich auch nicht. Eben deshalb treffe ich keinerlei Aussagen über die Funktionalität, wenn ich es nicht ganz genau weiß. ^^



    Aber ich würde behaupten wenn man ein new macht und eine Liste übergibt, dass es die Werte übernhemen soll,
    müssen die werte genauso kopiert werden wie mit einer Schleife und dabei muss auch die Größe bestimmt werden. Und dazu noch Speicher allokiert werden.


    Tja, fragen wir doch mal 'Das Internet™'.

    Code
    public ArrayList(Collection<? extends E> c) {
      elementData = c.toArray();
      size = elementData.length;
      // c.toArray might (incorrectly) not return Object[] (see 6260652)
      if (elementData.getClass() != Object[].class)
        elementData = Arrays.copyOf(elementData, size, Object[].class);
    }


    Sie nutzen also Arrays.copyOf().

    Code
    public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
      T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength);
      System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));
      return copy;
    }


    Nicht, dass ich da jetzt durchsehen würde, doch es sieht mir nach was ganz Anderes aus als einer For-Schleife. ;)
    System.arrayCopy(...) sagt leider nix darüber aus, wie es weiter geht. Das wird daher vermutlich Sache der RunTimeEnvironment sein. Und die ist per Definition besser und performanter als eine For-Schleife. ;)


    Klar der Garbage kollektor macht viel, aber braucht auch seine rechenzeit dafür...


    Mir wäre eine manuelle Speicherverwaltung lieber. Gibt es unter Android nicht, also ist es auch egal.
    Der Garbage Collector ist die einzige Möglichkeit der Speicherverwaltung, also müssen wir uns darauf verlassen, dass sie ordentlich funktioniert.


    Ich kenn es auf jedenfall von c++, dass zuweisungen viel weniger Zeit brauchen als speicherallokation.


    Eierst du in C++ mit Nachrichten an die Objekte herum? Soweit ich weiß greifst du da direkt auf die Member zu, was natürlich eine Ressourcenersparnis darstellt.
    Da Java aber kein C++ ist, hilft dir das Wissen hier leider nicht weiter.


    Aber ich kenn mich auch nicht so gut aus. Das gleiche Ergebnis kommt auf jedenfall raus


    Natürlich. Du fingst mit Optimierungsvorschlägen an und ich meinte es gäbe nix zu optimieren.
    Funktional ist beides und die new-Variante ist sprechender.
    (Ja, ich weiß. Sprechender Code ist nicht ausschlaggebend für C++ Entwickler. +scnr+)

    Ich hätt sowas auch gern, nur hier für unser iPad ...
    Hintergrund ist der, dass das Ding am anderen Ende des Büros an den Boxen hängt und ich nicht dauernd rüber latschen will. Könnte man per Klick hier am PC dort drüben z.B. muten wenn das Telefon klingelt


    Also an meine Boxen hängt eine Anlage. Und an der Anlage hängt ein Rechner. So in groß. Mit eigener Stromversorgung. Ohne Akku.
    Da brauche ich nur ein mobiles Endgerät zum Fernsteuern und muss mich auch keinen Schritt bewegen.


    Ich jedenfalls stehe total auf Medienrechner. So'n mac mini oder http://www.raspbmc.com auf nem (hier erwähnten) Raspberry Pi sind schon ne geile Nummer.
    DAFÜR wäre mir ein Tablet ja echt mal zu teuer. ^^


    Beim iPad/Tablet/Sonstwas geht doch auch einfach eine Remote-Anwendung.
    Bluetooth oder WLAN an und los. Ja, man benötigt da eine eigene App. Dafür ist die dann aber auch perfekt auf das Endgerät zugeschnitten.
    Noch geiler wäre natürlich eine eigene Fernbedienung nur dafür. Ich meine, wie geil sähe es aus, wenn du auf einen Knopf an einem kleinen Kasten drückst und das Ding ist ruhig? ^^


    müsst ich nur noch zum Kaffee holen aufstehen :D


    Und zum Kaffee wegbringen. ;)


    [ThomasDroid]
    Bin gespannt ob und wenn ja wie es klappt. :)

    [CdWechsler]
    Ich hatte zu deinen Fragen nix mehr geschrieben, weil all das eigentlich schon hier steht...
    Das mit dem Song war ein aus dem Leben gegriffenes Beispiel, dass du da deine eigenen Datentypen rein packen kannst/sollst/darfst, habe ich als Grundlagenwissen vorausgesetzt...


    [ThomasDroid]
    Ich denke, der GarbageCollector ist so geil? Der müsste ja eigentlich mitbekommen, dass wenn ich list2 = new List(list) mache, die alte Referenz auf list2 weggeworfen gehört.


    Im Beispiel mit New gibt es genau eine Nachricht an ein Klassenobjekt, welches dann genau X Byte an Speicher für sein Objekt zurückgibt.
    Das Beispiel mit der Schleife ist zunächst einmal eine Schleife. Weiterhin gibt es list.size() Nachrichten an ein Instanzobjekt Liste2 und an ein Instanzobjekt Liste.
    Im günstigsten Fall also die doppelte Menge an Nachrichten, Tendenz steigend.


    Der erste Ansatz erfordert ein wenig mehr RAM, was dank des GarbageCollectors nur kurz auffallen dürfte. Der zweite Ansatz hingegen erfordert im Verhältnis Unmengen an Prozessorleistung. Hinzu kommt, dass eine Collection meines Wissens ihren Speicherbedarf dynamisch regelt. Eine Liste mit 0 Objekten braucht natürlich weniger Speicher.


    Statt also 1x X Byte an Speicher zu reservieren legt die Schleife list.size() mal sizeOf(Integer) Byte zusätzlich an. Derartige Neuzuweisungen von Speicher sind ebenfalls prozessor- und sogar RAM intensiv.


    Bevor man also ein new... durch eine Schleife ersetzt soll einem zunächst wirklich mal das RAM um die Ohren geflogen sein.
    Garbage Collection wurde 1959 im Rahmen von Lisp eingeführt. In den fast 55 Jahren sollte man doch annehmen, dass sich das ganze System einigermaßen etabliert hat. Und auch wenn niemand weiß, wann genau GarbageCollection aufräumt, so räumt es doch auf, bevor RAM zur Neige geht.


    Finger weg von vermeidlichen Optimierungen ohne vorherige Tests und definitiver Probleme.
    POITROA.

    Nun, zunächst einmal finde ich den Ansatz äußerst Spookey.
    Normalerweise nutzt man die mobilen Geräte doch als Fernbedienung für stationäre Geräte und nicht umgekehrt...


    Anyways, gute Frage und nur eine unzureichende Antwort:
    URL Schemes


    Dein Button würde dann also eine Activity deines Musikplayers auslösen, welche entsprechend die Musik manipuliert.
    Du brauchst dann also mindestens eine PlayActivity, eine PauseActivity, eine NextActivity, eine BackActivity und eine StopActivity mit jeweils eigenem URL Scheme. Ein Klick auf den Button ruft dann einfach nur dieses URL Scheme auf.
    Soweit die Theorie, getestet habe ich es noch nicht.


    Auch wird mir der Sinn dahinter nicht klar.
    Wenn du dein Tablet als Musikplayer nutzen möchtest, dann kannst du doch viel einfacher nur auf dem Tablet herumdrücken statt am Desktop die Website aufzurufen...

    Du kannst auch die ArrayList mischen mit Collection.shuffle(allItems) - wenn du es einfach haben willst.


    Random Krams ohne Random Seed sind erfahrungsgemäß nur halb so random.
    Die Variante mit System.nanoTime() als Seed finde ich zufälliger.


    In Java ist fast alles ein Zeiger - außer den Basis-Typen. Darum braucht man nicht extra davon zu reden, das spart viel Verwirrung beim Erklären von Java... *g*


    Bei Zeigern auf Zeiger oder Zeiger auf Methoden versagen sie dann. Nicht sehr konsequent, wenn du mich fragst. ;)

    Ich habe es so verstanden, dass das ListView lediglich zur Darstellung von Inhalten dient.
    Eigentlich wäre der Weg, so wie ich ihn erwarte, dass nach Antippen eines Items der ListView ein Editor geöffnet wird, in dem ich dann die benötigten Werte eintrage.


    Allerdings kann ich nicht abschätzen, wie hoch da der Aufwand unter Android für ist.
    Auf dem iPhone wären's drei Zeilen. ^^
    (zuzüglich den ungefähr 25 Zeilen, die die IDE automatisch tippt.)

    Nun ja, zufällige Zahlen bedeuten eben auch, dass zufälligerweise dieselbe Zahl 5x hintereinander kommt.
    Gerade beim Rollenspiel (so mit Würfeln) ist man sehr scharf drauf, dass eben genau das passiert: der Zufall soll die günstigsten Zahlen ausspucken. ^^


    Ich vermute, dass du eigentlich gar keine Zufallszahl möchtest. ;)


    Eigentlich ist das ganz simpel: Du möchtest, dass ein Objekt nur ein einziges mal gezogen wird. Wo haben wir das noch?
    Genau, beim Lotto. 6 aus 49 oder so.


    Wie sorgen die dafür, dass nicht drei mal hintereinander die 3 gezogen wird?
    Die 3 fliegt aus dem Pool, sobald sie gezogen wurde.


    Dazu könnte man also sagen:


    Wenn deine Objektkopien leer sind, dann nimmst du einfach die Objekte da rein.
    Nun wird zufällig ein Objekt gewählt und aus den Objektkopien geworfen. Damit schrumpft die Größe um 1.
    Wenn also eben r=3 war und jetzt wieder r=3 ist, gibt es dennoch ein anderes Objekt.


    Irgendwann ist die Größe == 0. Und dann wird die Objektkopie erneut gesetzt.


    Noch feiner wäre es natürlich, ganz auf diesen Random-Kram zu verzichten, eine gemischte Liste zu erstellen und einfach immer das erste Objekt zurückzugeben.

    Das ist ja witzig; in dem Testprojekt geht alles ?


    'Alles' würde ich jetzt nicht sagen, wenn ich mehr als einmal irgendwo hin tippe stürzt es mir ab. ;)
    Aber die Übergabe funktioniert einwandfrei. Das ist leider oftmals so. Man baut in seinem Hauptprojekt alles Mögliche ein, zweifelt an dem ganzen System, testet in einem Projekt seinen Ansatz, stellt die Funktionalität fest und spontan fällt einem auf, wo das Problem eigentlich lag. :)

    Ich kann den Inhalt auch nicht per tv.setText(et.getText().toString()) setzen, allerdings gibt Log.d("OUTPUT", et.getText().toString()) den Inhalt richtig aus.


    Das klingt ausgesprochen verwunderlich.
    Dir stürzt dabei auch nix ab oder so?
    Bau doch bitte mal ein kleines Testprojekt, dass nur aus den nicht funktionierenden Teilen besteht und lad das hier hoch.
    Dann schau ich mir gern mal das Gesamtkonstrukt an. :)

    Hi UweApps,


    danke für die Tipps.
    Das mit den Testmodulen hatte ich so bereits gesehen, wunderte mich nur, dass ich ausschließlich mein Demoprojekt als 'zu testen' auswählen konnte.
    Scheint darin begründet zu liegen, dass das Default-Testprojekt unbedingt ein ActivityTest sein will. +seufz+


    Wie dem auch sei.
    Nach längerem Hin und Her habe ich zumindest ein paar lauffähige UnitTests erstellen können.
    Danke für deine Hilfestellungen. :)

    Über das WLAN Modul? 8|
    Das WLAN Modul ist doch bloß ein Weg, die Übertragungsschicht zu implementieren (OSI Layer 1)


    Du musst eigentlich erst ab OSI Layer 4 anfangen, der Transportschicht.
    Das ist in dem Fall des WLAN eine einfache TCP Verbindung.


    Also IP–Adresse der Lüftersteuerung und Port benutzen, Socketverbindung via TCP dort hin aufbauen und loslegen.
    Das 'Loslegen' ist dann im Datenübertragungsprotokoll der Lüftersteuerung definiert.

    Wenn du nicht weißt, was ProjectDao ist, woher hast du das dann? 8|


    Zum eigentlichen Problem:
    StackOverflow sagt:

    Java
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);


    Dein Zusatzcode sieht mir nach einem Programm aus, das GreenDao benutzt. In der Clean-Methode wird einfach nur die Datenbank geschlossen, auf die er in dieser Activity Zugriff hatte. Das hat mit deiner Frage allerdings so überhaupt gar nix zu tun. ;)

    Oops, hatte statt Deutschland Europa genommen. +hust+
    Dass auch die kleineren Daten weder in meinen internen Speicher noch auf meine µSD passen, lasse ich jetzt mal außer Acht.
    (900MB/500MB)


    Na, das Dokument zeigt es doch ganz eindrucksvoll und liefert sogar Beispiele zu Bibliotheken, mit deren Hilfe man sich seine Kärtchen rendern kann.
    Sehr bookmarkwürdig, dieses Dokument. :)

    Die pbf von Deutschland sind aber schon mal 10GB, die bekomme ich auf meiner externen Karte nicht unter.
    Vom internen Speicher reden wir mal gar nicht erst.


    Leider sind die Wiki–Seiten gerade nicht erreichbar.
    Nichts desto weniger ist dieses obf dann auch nur ein optimiertes Binärformat der OpenStreetMap Daten und erst einmal keine Vektorkarte. ;)


    Vermutlich wird OsmAnd die Karten on-the-fly durchrendern, da zumindest gemäß Exportlog diverse Informationen mit in dieses Format eingeflossen sind.
    Zum Beispiel sieht man, dass diversen Stadtteilen Polygone zugeordnet wurden, welche im pbf vermutlich nicht vorkommen.


    Wie geschrieben habe ich leider keinen Zugriff auf die WiIki-Seiten von OpenStreetMap. Insofern kann ich auch das Datenformat nicht überblicken.
    Ich habe gerade mal den OsmAndMapCreator ausprobiert und was soll ich sagen?
    Der legt mir dann einen Tiles-Ordner neben der .obf an, welche MapNik Render in der bereits zu Anfang genannten Ordnerstruktur aufweist.
    Mapnik/zoom/x/y.png.tile


    Guatemala war jetzt vielleicht nicht die beste Wahl, aber dafür recht klein und die Tiles sind im PNG-Format 780kB groß (während die osm.pbf 3,9MB groß war)


    Dass es jetzt nur die Dateien 'indiziert' hat, und dann auch noch so schnell, spricht gegen die Live-Rendering-Theorie.
    Andererseits berechnet sich vielleicht ein Algorithmus Größe und Zoomlevel der aktuellen Karte und rendert es dann heraus. Mit einer Bounding Box über meinetwegen 700 Einzelkoordinaten und einem vernünftigen Parser könnte das ziemlich zügig gehen und vernünftige Ergebnisse liefern.


    Leider habe ich keine Zeit da etwas auszuprobieren. -.-
    Und obwohl OsmAnd eine Google Code Seite hat gibt es kein sichtbares Repository zum Schnüffeln.

    Mein Problem liegt wohl eine Ebene höher.
    Permission ist gesetzt:

    XML
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


    AVD kann gemäß Einstellung GPS.
    Im Emulator kann ich in der Settings App GPS aktivieren und deaktivieren, ich habe es aktiviert.

    Java
    (LocationManager)getSystemService(Context.LOCATION_SERVICE)


    liefert auch ein gültiges Objekt zurück.


    Es passiert: nix.
    Egal was ich reinpumpe, kein onLocationChanged(Location) wird aufgerufen.


    Und gerade fällt mir folgende Meldung auf:

    Zitat

    04-05 07:53:25.749: ERROR/ThrottleService(99): Could not open GPS configuration file /etc/gps.conf


    Google schweigt sich diesbezüglich aus, StackOverflow spricht von 'ignorier es halt, sofern du da keine expliziten Probleme hast'.
    Beheben konnte ich das Problem allerdings nicht, ich bekomm' keine Änderungsinformationen auf dem Emulator mit. :(


    Unbequem wäre mir ja egal, wenn es denn wenigstens liefe.