Beiträge von Marco Feltmann

    Android Studio ist eine Developer Preview.
    Nachdem ich bis 0.3 total überzeugt davon war hatte ich seit 0.4.9 irgendwie nur noch Probleme.


    Leider kann ich jedem Anfänger nur empfehlen, die de-facto Standards zu nutzen:
    Eclipse oder (wer es nicht mag) IntelliJ IDEA Community Edition.

    Ich würde die .jar einbinden.


    Rechtsklick aufs Projekt, 'Properties', 'Java Build Path' in der Navigation links wählen, Reiter 'Libraries' in der Übersicht rechts wählen, 'Add JARs…' bzw. 'Add External JARs…' klicken, auswählen und benutzen wie dokumentiert.


    Etwas geiler sind natürlich Buildsysteme wie Maven oder Gradle.
    Leider ist die Gradle Unterstützung im Speziellen und Android Studio im Allgemeinen noch nicht so ausgereift, dass ich es als Produktiv-IDE empfehlen kann. :(

    Eventuell helfen Dir hier die Informationen von Android selbst ein bisschen weiter.
    .
    Das Stichwort lautet 'SIP'.
    http://developer.android.com/g…ics/connectivity/sip.html


    (Ich bastel gerade auch an einem VoIP Projekt – Spaß ist anders. Allerdings will ich einen eigenen Server schreiben [und vermutlich haben Skype, WhatsApp, Tango & Co ebenfalls einen eigenen Server und sind damit ihr eigener SIP Provider], und da ist die Android-interne Funktionalität unzureichend.)

    Gute Frage, die Doku lügt doch nicht, ich dachte nur falsch.
    Nimm den InputStream, den Du über den äquivalenten Weg bekommst. ;)


    Statt -t kannst Du beispielsweise auch '-c 5' nehmen. Dann bricht der nach 5 empfangenen Blöcken ab.


    Die Antwort, die 64 Bytes groß ist, ist die Antwort auf den Ping. Die Ausgabe selbst ist dieser Text.
    Mit RegEx Suchen auf die Strings kannst Du beispielsweise den Ping raussuchen.
    Oder Du erstellst Dir einen Substring aus jeder Zeile startend bei 14 und endend beim nächsten Leerzeichen.

    Im Prinzip eine gute Idee. Du solltest das nur nicht ohne das Wissen des Users machen.
    Sinnvoller wäre es, dem User anzubieten Deine App mit seinem Google Konto zu verknüpfen.
    Viele haben mehrere Konten und nutzen z.B. für Spiele ein Anderes als das, mit dem Sie ihr Gerät und ihre Mails verknüpft haben.
    Ich zum Beispiel nutze Google Mail überhaupt nicht (ergo keine Datenbank), habe aber natürlich ein bis drei Google Konten.


    Überhaupt habe ich durch die Arbeit mit Objective-C viel gelernt, was in C++/C#/Java immer und immer wieder falsch gemacht wird.
    Gehe nicht davon aus, sondern frag nach.
    http://patshaughnessy.net/2014…ont-tell-policy-with-ruby


    Google Play bietet beispielsweise zum Verknüpfen eine OAuth API an:
    https://developers.google.com/…d-publisher/authorization


    Damit kannst Du simpel feststellen, ob der User berechtigt ist und musst keinerlei Annahmen darüber machen.

    Zum Beispiel so:

    Java
    Runtime runtime = Runtime.getRuntime();
    proc = runtime.exec("ping -t 10 10.10.255.255); // -t 10 wartet 10 Sekunden und beendet dann den Ping.
    try {
      OutputStream pingOutputStream = proc.getOutputStream(); // Die Doku widerspricht sich hier und behauptet, man bekäme stdin – wäre aber Blödsinn
      // Hier unten kannst Du dann fröhlich Deinen hoffentlich fertigen OutputStream durchforsten.
    } 
    catch (InterruptedException e) {
      e.printStackTrace();
    }

    Also ich habs nicht so ganz verstanden. :)


    Ist die Datenbank jetzt lokal auf Deinem Rechner und wird auch immer lokal auf einem Rechner in einem autarken Netzwerk sein? Dann nimm den Ansatz mit der JDBC.


    Ist die Datenbank global im Internet erreichbar, solltest Du eine Abstraktionsschicht dazwischen setzen. Beispielsweise eine PHP Seite oder, solltest Du Dich dort eher zu Hause fühlen, eine ASP Seite. Irgendwas, das aus einer klaren, simplen und unmissverständlichen Anforderung (beispielsweise ?action=get&category=user&id=3) die ganzen Queries zusammenbaut und das Ergebnis aufbereitet zurückliefert.


    Es muss halt niemand wissen, wie Username und Kennwort des Datenbankbenutzers sind, wie die Datenbank und die Tabellen heißen und welche Felder da drin sind. ;)

    In vielen Fällen ist es sogar eine ziemlich blöde Idee, immer mit FindViewById zu arbeiten*.
    Allerdings sind 'globale Variablen' eine noch viel blödere Idee.


    Instanzvariablen hingegen (vermutlich meinst Du genau diese, wenn Du von 'klassenweit' schreibst) sind immer eine gute Idee.






    *) Stichwort: ViewHolder Pattern beim ListView.

    Also eigentlich sieht das doch schon ganz gut aus.
    (Ich sehe mal davon ab darauf hinzuweisen, dass direkte Zugriffe auf SQL Datenbanken über ein mobiles Gerät ein hohes Sicherheitsrisiko sind und vermieden gehören – deshalb die ganzen Tipps mit PHP und Co. Es hat seine Gründe.)


    Zunächst einmal finde ich es arg befremdlich, dass Du in einer Schleife alle Ergebnisse des Sets abgreifst und damit ein und denselben String immer und immer wieder überschreibst. Eventuell erwischt Du tatsächlich als letzten Datensatz den, der keinen Wert im Feld stehen hat und deshalb ist Dein String leer.
    Ebenso wahrscheinlich ist es, dass Du bei Index 1 gar nicht den Wert hast, den Du erwartest. Es ist guter Stil im Query nur anzugeben, welche Werte man wirklich auslesen möchte. Also beispielsweise 'SELECT _id, category, title FROM fragen'. Damit legst Du auch gleich die Reihenfolge im ResultSet fest und kannst Dich darauf verlassen, dass an Index 1 die Kategorie steht.


    Ich an Deiner Stelle würde mit einem Breakpoint vor der Schleife eben diese einmal durchgehen und mir auch die Inhalte des ResultSet einmal ansehen.

    Also zunächst mal ist Deine Lösung nicht gut.


    Du hast eigentlich nie genau 254 zum Router gehörende IPs.
    Nehmen wir an es handle sich um 192.168.1.1 mit der Subnetzmaske 255.255.255.0
    Dann wäre 192.168.1.0 die Netzwerkadresse und keine gültige IP.
    Und die 192.168.1.255 wäre die Broadcastadresse und ebenfalls keine gültige IP.


    Lautet das Ganze aber 192.168.1.0/255.255.0.0, dann sieht das plötzlich ganz anders aus.
    192.168.0.0 wäre die Netzwerkadresse und 192.168.255.255 die Broadcast. Du hast also ungefähr (255*255)-2 mögliche Adressen – viel Spaß beim Warten.


    Schön ist auch das interne 10er Netzwerk.
    10.0.0.1 bei 255.0.0.0 macht 10.0.0.0 als Netzwerk- und 10.255.255.255 als Broadcast, also (255*255*255)-2 Adressen.


    Im Gegenzug dazu könnte es auch wie folgt aussehen:
    192.168.160.66/255.255.255.192
    Dann hätten wir 192.168.160.64 als Netzwerk- und 192.168.160.71 als Broadcast, Du kommst also keinesfalls an beispielsweise die 192.168.160.75 ran.


    Lange Rede gar kein Sinn.
    Entweder Du überprüfst Deine IP mit Deiner Subnetzmaske und ackerst dort alle für Dich erreichbaren IPs ab.
    (Mit Proxies, NAT und wasweißichwasnoch wird allerdings auch das eher ungenau)
    Auch da hast Du das Problem, dass jeder Ping ganz schön dauert, bis der Timeout passiert.


    Eine praktische Möglichkeit bietet da der Ping auf die Broadcast Adresse.
    (Wie eben angedeutet muss diese an Hand Deiner IP und Deiner Subnetzmaske berechnet werden.)


    Beispiel:


    Das lässt Du ein paar Sekunden laufen, parst die Rückgabewerte, fügst immer neue IP-Adressen hinzu und wertest dann am Ende die Liste mit den Adressen aus.


    Wer darauf nicht antwortet ist entweder nicht da oder antwortet generell nicht auf ICMP PING. So oder so würde Deine Methode ihn aber auch nicht finden.


    Vermutlich wäre es geiler, wenn man an die DHCP-Tabellen des Routers käme. Ist allerdings auch ein Sicherheitsrisiko.

    Nachdem ich für ein neues Projekt wieder die wunderbaren Services von TestFlight nutzen wollte, stellte ich gerade mit Erschrecken fest, dass der Support für Android vor ungefähr 14 Tagen eingestampft wurde.
    Ein Schelm, der Böses dabei denkt, dass das ungefähr einen Monat nach Übernahme der Entwicklerfirma Burst durch Apple passiert ist…


    Anyways, ich brauche eine Alternative.
    Dringend!


    Kennt da wer was?