Rapax grüsst

  • Hoi zäme!


    Es grüsst euch aus der Schweiz, der Rapax.


    Hab' seit einiger Zeit ein G1, US-Import, da unsere dämlichen Telco Anbieter immer noch nicht kapiert haben, dass Android die Zukunft ist.


    Zur Zeit läuft das Cyanogen Mod 4.2.9.1 drauf (ändert öfter mal).


    Meine Motivation mit dem Android Programmieren anzufangen ist der Wunsch ein Volltext-Suchprogramm zu schreiben, und zwar eins welches lokal gespeicherte .txt files (später evtl. auch andere Formate) nach einem vom Benutzer angegebenen Begriff durchforstet und dann die filenames der Treffer zurückgibt. Tönt einfach, aber oh Wunder...sowas gibt's scheinbar noch nicht.


    Das wär' jedenfalls das Fernziel, und es scheint noch ganz schön weit weg. Ich hab' nun mal Eclipse mit den nötigen Erweiterungen zum Laufen gekriegt, und die diversen 'hello world' progrämmchen laufen im Emulator schon ganz gut. Aber dass ist's dann auch schon mit meiner Erfahrung.


    Ich denke, als erstes schau ich mal wie ich ganz simple eine Dateiliste eines Verzeichnisses in meinem Programm ausgeben kann, dann sehen wir weiter.

  • Keine Ahnung ob das hier der richtige Ort für solche Anfängerfragen ist, aber ich denk' hier kann ich zumindest niemandem auf die Nerven gehen. Also los: Ich versuch ein ganz simples progrämmchen zu schreiben, welches eine Dateiliste in einem angegebenen Verzeichnis holt, und den ersten Eintrag (müsste ja immer '.' sein, oder?) an ein TextView weitergibt. Das Verzeichnis ist zur Zeit immer noch hardcoded vorgegeben. Idealerweise müsste das App also nur einen Punkt in einem Textview zeigen. Allerdings beendet die App jeweils unerwartet, und ich krieg nur einen 'Force Close'. Kann vielleicht jemand mal meinen code anschauen?



    Das Verzeichnis /sdcard sollte vorhanden sein, da ich der virtual device gesagt hab' er soll 1000MB sdcard simulieren. Beim Aufstarten kommt auch immer die Benachrichtigung, dass die sdcard vorbereitet wird.

  • Zitat von Rapax


    Eigentlich müsstest du eine NullPointerException bekommen, da du tv_out nicht initialisiert hast. In deinem layout xml file hast du eine ID für das TextView vergeben. Mit dieser ID kannst du an eine Instanz kommen:


  • Natürlich, das wars; danke. Macht auch richtig Sinn, wenn jemand mich mit der Nase drauf stösst. Nun klappt's.


    Interessanterweise sind die elemente von list nicht in alphabetischer Reihenfolge.
    list[1] ist config,
    list[2] ist cache,
    list[3] ist sdcard
    list[4] ist d
    etc.


    Nächster Schritt, die komplette Liste anzeigen, und evtl. vom Benutzer eins auswählen lassen.


  • Ja, sie werden in der Reihenfolge angezeigt, in der sie im Dateisystem angelegt wurden.


    Weiterhin viel Erfolg.

  • Zitat von Rapax


    Nächster Schritt, die komplette Liste anzeigen, und evtl. vom Benutzer eins auswählen lassen.


    Nach einigem Herumsuchen bin ich nun der Meinung, das ListView vermutlich die beste Option wäre. ListView schluckt ja anscheinend gleich ein ganzes String-Array, was noch besser ist.
    Allerdings scheint es mir, als ob's für ListView kein analog zu


    Java
    tv_out = (TextView) findViewById(R.id.t_v);
    tv.setText(list[4]);


    gibt. Irgendwie muss man doch die String Array in das ListView hineinkriegen, oder? Müsste es da nicht auch etwas in der Art von

    Java
    tl_out = (ListView) findViewById(R.id.lv);
    lv.setText(list);


    geben?


    Kann mich mal jemand in die richtige Richtung schubsen?


    EDIT: Ich bin mittlerweile über dieses Tutorial gestolpert: http://d.android.com/guide/tut…views/hello-listview.html aber der gezeigte code produziert eine 'java.lang.NullPointerException'. Vermutlich wieder ein ganz simpler Fehler, aber ich seh' ihn nicht.

  • Zitat von Rapax


    Irgendwie muss man doch die String Array in das ListView hineinkriegen, oder?

    Java
    tl_out = (ListView) findViewById(R.id.lv);
    lv.setText(list);


    Hast du's mal mit:


    Code
    tl_out = (ListView)findViewById(R.id.lv);
    tl_out.setAdapter(new ArrayAdapter<String>(this, R.id.lv, list));


    probiert? So oder so ähnlich sollte das gehen. Hab schon ewig nichts mehr mit ListViews gemacht. Wenn's nicht klappt, dann meld dich nochmal. Dann les ich mal in der Api-Doku nach.

  • Jetzt läuft's mindestens an, aber es folgt dann ein force close 'Application ended unexpectedly'.


    Die Zeile

    Code
    lv.setAdapter(new ArrayAdapter<String>(this, R.id.lv, list));

    beinhaltet ja das initialisieren von dem neuen ArrayAdapter, oder? Also ist's wohl nicht das gleiche Problem wie beim letzten Mal als ich diese Fehlermeldung sah.

  • Es ist wieder mal an der Zeit für ein Status update...natürlich wieder mit dazugehörigen Fragen.


    Mein 'Volltext-Sucher' läuft nun eigentlich ganz passabel; durchsucht einen beliebigen (first level) Ordner voll txt html und xml files nach einem von Benutzer angegebenen String und gibt die Filenamen von den files in denen es etwas zu finden gab auf einer neuen Seite als 'Spinner' aus. Soweit so gut, das app scheint im Emulator, und auch auf einem richtigen G1 und einem milestone korrekt und stabil zu laufen. Sourcecode ist jederzeit erhältlich falls jemand Interesse hat.


    Aber nun...die Fragen:
    Ich krieg's nicht hin, aus meinem app heraus ein lokales html file im htmlviewer anzuzeigen. Kann mir evtl. jemand zeigen wie das geht?


    Weiter: Ihr werdet euch sicher Fragen warum ich für die Ergebnisse einen Spinner in 'LinearLayout' gewählt habe, und nicht gleich eine ListView. Tja, irgendwie kann ich anscheinend keine ListView starten aus einer Activity in LinearLayout. Ein alleinstehendes ListView app geht (HelloListView, z.B), aber sonst....? Hat da vielleicht jemand ein Beispiel?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!