Beiträge von UweApps

    Gib doch noch mal zusätzlich zu artist und title auch den uriPath aus - vielleicht greifst du ja an der Stelle irgenwie auf die falsche Datei zu.


    Ansonsten hab ich noch den Tipp, die Dateien in den asset-Ordner zu packen statt in res/raw - irgendwie sind die ja eher Zubehör als Rohdaten. Nur ist dann der Zugriff auf die Dateien etwas anders, aber das ist dann ein anderes Thema. Zusätzlich könnte noch eine Playlist in einer Datei oder vielleicht in der Datenbank eine sinnvolle Anpassung sein. Dann kannst du die Playlists einfacher ändern als hier im Code mit int-Arrays. ^^

    Da wäre auch eigentlich eher die SupportLib v4 zuständig, die ja die API-11er Ergänzungen nach unten durchreicht.


    Aber leider haben sich die Google-Leute den Teil offensichtlich gespart.


    Wäre als Alternative höchtens was aus android.view.animation zu nehmen oder du musst einen RefreshHandler extends Handler definieren, der sich die Messages zum Update nach deinem Plan zuschickt und dann die Werte ändert.

    Dann gib doch mal mit Log.v("MyClassName", "Dateiname: "+file.getPath()) den gewünschten Namen aus. Vielleicht greifst du ja auf ein Verzeichnis statt auf eine Datei zu...


    Zugriffsrechte sind im Environment.getExternalStorageDir() normalerweise kein Problem, kann man aber auch mit file.canRead() prüfen. Interessanter wäre noch die Abfrage nach file.isDirectory() bzw. file.isFile().


    Vielleicht hilft dir auch file.length() um die Größe zu prüfen, damit du schnell siehst, ob die Datei komplett kopiert wurde. Aber das sollte eigentlich der Fall sein, sonst wäre das ein ziemlich schlimmes Problem...

    Ich hab auch ein paar Dinge mit eigenen Libs gemacht, aber immer drauf geachtet, dass die Klassennamen in der Lib nicht noch mal im eigenen Projekt drin sind. Dort kann ich ja mit extends einfach von der Lib-Klasse ableiten und Anpassungen vornehmen.


    Die Sache mit "Project" - "Clean..." ist für das Lib-Projekt sehr wichtig, weil die anderen Apps nur auf die letzte erzeugte Binär-Version der Lib zugreifen und nicht auf den Quellcode - und der Binärcode wird nur neu gebaut, wenn er durch das cleanen gelöscht wurde.


    Den Fehler mit der attrs.xml kann ich dir vielleicht auch etwas näher erklären: es liegt nicht an der xml-Datei sondern am Inhalt. Zunächst mal sind alle values-xml-Dateien eines Projekts gemeinsam gültig, die Aufteilung in einzelne Dateien kann nach Belieben vorgenommen werden. Bei Projekten in Kombination mit Lib-Projekten ist bei gleichem name-Attribut (z.B. bei string-Definitionen) dann die Einstellung in der Main-App gültig, wenn da nix ist, wird die Lib-Einstellung genommen.


    Einige Tags (z.B. declare-styleable / attr) sind aber nicht überschreibbar, da sie inhaltlich gar nicht anpaßbar sind - du kannst den Namen ändern, aber dann ist es ein anderes Attribut, oder du änderst den Typ, dann geht die Verarbeitung nicht mehr.


    Ich hoffe, du bist etwas jetzt ratvoller. :)

    Die Dateien in res/raw werden auch über die Resources verwaltet - nicht als Dateien im Dateisystem, sondern über interne Referenzen.


    Wenn du mehr auf Dateien Wert legst, dann ist das Verzeichnis MyProject/assets der Ort, wo du die mp3-Dateien speichern solltest und der Zugriff geht dann über getAssets().

    Änderungen in einem Resource-Ordner werden nicht übernommen?


    Bei Eclipse ist das gerne mal der Fall, weil die Inhalte der res-Ordner nur gelegentlich in die Code-Basis übernommen werden.


    Nach Änderungen in res-Unterordnern sollte ein "Project" - "clean..." dieses Problem beheben.

    Hallo drumliner,


    wir hatten unsere Antworten gleichzeitig geschrieben - und ich hatte mich eher auf die Frage nach der direkten Berechnung aus vorhandenen Koordinaten bezogen.


    Natürlich ist die Anwendung der Location-Methoden sinnvoller, weil da die Berechnung schon drin ist. ^^

    Hallo Katsche,


    wow - sehr gute Idee! Und das ist auch eine schöne Anfängeraufgabe, die auf jeden Fall lösbar ist.


    Damit das auch richtig gut wird, solltest du auch 'nen kleinen Projektplan machen. ;)


    Versuch erst mal den DatePickerDialog - da bekommst du ein bisschen das Gefühl, wie die Teile miteinander zusammen wirken. Log-Ausgaben helfen dabei.


    Achja - Hinweis für Anfänger:
    wenn die App im Emulator läuft, kommen Log-Ausgaben in Eclipse im LogCat-Fenster an (wenn nicht, eventuell beim Tab Devices den View-Menü-Unterpunkt "reset adb" aufrufen).
    Log-Ausgaben kannst du im Programm erzeugen mit Log.e("MyActivity", "ausgabetext");


    Hinweis zum zweiten Bild:
    Bei der zweiten Seite brauchst du einen ListView mit ListAdapter - und der wird dir wahrscheinlich noch viel Mühe kosten, weil da verscheidene Sachen zusammengestöpselt werden müssen. Dazu gibt's aber auch Infos.


    Viel Erfolg
    Uwe

    na, ganz schön viele Fragen auf einmal. ;)


    1. Dialogbearbeitung


    Da gibt's ein ganz gutes Tutorial.


    Im Prinzip geht's darum, dass der TextView einen onClickListener bekommt, der beim Anklicken den Dialog anfordert, Android ruft onCreateDialog auf und in deinem Code sollte ein DatePickerDialog gebaut und zurückgegeben werden.


    Nach der Eingabe kommt das Ergebnis in onDateSet wieder zurück und du kannst es ein dein gewünschtes Ausgabeformat umwandeln und im TextView anzeigen.


    2. ScrollView


    Du musst um deinen Container für die RadioButtons noch einen ScrollView packen - der ScrollView darf aber nur einen Container enthalten (z.B. LinearLayout oder RelativeLayout).


    3. Eclipse auf deutsch


    Das geht auch, aber ich weiß nicht wie - ich mag die englische Version. ;)


    4. Anzeige von Errors


    Das kann passieren - manchmal hilft auch, wenn man einfach mal speichert. Aber das wird dir später seltener passieren, am Anfang hab ich das aber auch immer gehabt. :-[


    5. Bücher


    Guckst du hier. Aber ich hab als wichtigste Quelle die developer.android.com benutzt.


    6. Rad2.0


    Das haben sich die Leute bei Android auch gedacht und in den Entwicklerdokus sind viele Beispiele drin - aber leider nicht so wie man das für ein Rad2.0 gerne hätte.


    Vielmehr ist dort "Welle", "Nabe", "Speichen", "Radkranz", "Lauffläche" und "Lager" wunderbar als Beispiel beschrieben - nun musst du daraus deine Rad-Anwendung selber zusammenbauen: Hamster-Rad, Riesen-Rad, Wind-Rad, Wagen-Rad, Fahr-Rad oder was auch immer...


    Ansonsten gibt es viele Beispiele überall - aber da fällt mir spontan nichts spezielles ein. Mussu googlen.


    Aber nun hab Mut und stürz dich in das Vergnügen, Apps zu programmieren. Deine Idee erscheint mir sehr passend um sich damit in die Weiten und Untiefen von Android zu begeben - einige Klippen gibt's zu umschiffen aber es gibt auch viel Info und wenn nix mehr hilft, dann frag einfach nochmal hier. ^^

    Hallo Funtik,


    die Methode getContentResolver() ist in der Klasse Context definiert - und so einen Context trifft man überlicherweise als Activity im eigenen Code an.


    Über Context läuft vieles, was irgendwie zwischen Anwendung und Umgebung passiert - zum Beispiel Intent-Versenden und Empfangen, Zugriff auf Resourcen, auf das private App-Verzeichnis (u.a. mit Datenbank). Darum wird so häufig ein Context-Objekt an irgendwelche Android-Klassen im Konstruktor übergeben.


    Weil du von was anderem erbst, brauchst du einen Konstruktor im GetContactsAdapter - dem kannst du entweder von der Activity einen ContentResolver mitgeben (ist "hübscher") oder gleich die Activity (ist flexibler) und dann in deinem GetContactsAdapter als privates Attribut vom Typ Context speichern und bei Bedarf nutzen.


    Ich hoffe, das hilft dir weiter. :)

    Ich muss da noch mal nachfragen: was meinst du mit "aktives Layout".


    Vielleicht meinst du ja auch die Bildschirmausrichtung (portrait / landscape). Oder die aktive Layout-Datei...


    Oder suchst du nach einem aktuell angezeigten View-Element - dann hat dies hoffentlich eine android:id="@+id/myViewElement" und du kannst den View über findViewById bekommen.

    Du hast schon die richtige Abfrage drin gehabt - die Checkbox muss in jedem Fall gesetzt oder zurückgesetzt werden, da bei längeren Listen die Item-Views recycled werden, und dabei kann die Checkbox durchaus schon mal gesetzt worden sein.


    Nur hast du mit Cursor tC irgendwas vorgehabt, was so nicht geht. Zumindest ist die Variable nicht initialisiert, also null und darum knallt die nachfolgende if-Abfrage.


    Meiner Ansicht nach sollte da was stehen in der Art von if (c.getInt(spaltennummer) == 0) und so weiter. Du willst doch die Count-Information aus dem vorhandenen Cursor ziehen, oder? Die von dir gewünschte Count-Information muss ja für jeden Listeneintrag definiert sein, damit sich in den Listen auch unterschiedliche Werte anzeigen lassen.


    Ansonsten solltest du mal überlegen, was tC sein soll - und es deinem Programm erklären. Irgendwie muss tC ja gefüllt werden, damit du drauf zugreifen kannst.

    Puh - Server läuft wieder. *freu* Dann kann ich meine Antwort ja endlich loswerden...


    Der Task einen Handler auf die UI mitzugeben (im Konstruktor) ist auf jeden Fall auch ok, finde ich. 8)


    Nur weiß ich gerade nicht, was du mit "einem Array eine Parameterliste zu basteln" meinst. So etwas wie toArray()??


    Du könntest ja auch gerne den AsyncTask als <Url, Long, long> definieren und in der Schleife öfter aufrufen, aber dann hast du auf jeden Fall mehere postExecutes.


    Aber genau das sollte auch funktionieren wenn du das Array einmal mit execute übergibst und dann die Parameter abarbeitest.


    Ich habs zwar nicht probiert, aber wenn du AsyncTask<Url, Long, Long> definierst, sollte ein execute(urlArray) dir auch die Parameter als Array liefern, so wie du sie auch schon verarbeitest, aber eben nicht Listen, sondern nur Url... als Paramter.


    Es geht natürlich auch AsyncTask<Object, Long, Long> und dann execute(context, urlList) - dann mutig casten und gucken, ob du die Log-Ausgaben siehst.


    Hmm - bin selber wieder etwas verwirrt, könnte auch mit der kleinen Erkältung zusammenhängen, die ich gerade ausbrüte. *schnief*


    Vielleicht waren bei dem Geschreibsel hier ja ein paar Gedanken dabei, die dir weiterhelfen - ich weiß gerade auch nicht weiter, ohne dass ich größere Aktionen hier starte und Code implementiere... :*

    Hallo Lucas,


    du schreibst:


    Zitat

    Meine Idee war ein eigener Download-Manager, der einfach unabhängig von wo auch immer aufgerufen ein paar entsprechende Dialoge darstellt.


    Genau dabei hatte ich auch Probleme und hab deshalb meine AsyncTask als Subklasse an verschiedenen Stellen eingebaut. Dadurch konnte ich auf Variablen und Methoden der umgebenden Klasse zugreifen.


    Wenn du die Task aber als eigene Klasse schreibst, könnte dir ein Interface helfen, das die UI-KIassen implementieren müssen und über das du in den pre/postExecute die UI-Implementation aufrufst.


    Das Erzeugen von Dialogen wirst du wohl leider in den UI-Klassen anstoßen müssen, das können aber wieder eigene Klassen sein, damit du das MVC einigermaßen sortiert kriegst, außer jemand hat noch eine bessere Idee... *grübel*


    Zitat

    entweder) die Download Notifications sein lässt
    oder) alle 1 bis 5 Dateien als eine einzige Notification anzeigt


    Wenn die Task mehrfach gestartet wird, gibt's auch mehrere postExecutes - ich hab in meinem Code versucht, dies zu vermeiden.


    Ist ja auch blöd, wenn der User mehrere Dialoge um die Ohren gehauen bekommt. Eigentlich könnte die AsyncTask im doInBackground am Ende die Ergebnisliste zusammensammeln und dann hast du nur einen postExecute - eigentlich...

    Hallo Lucas,


    mit der AsyncTask hab ich auch schon einiges an Schwierigkeiten gehabt, ich versuche immer, die Inhalte von onPostExecute so kurz wie möglich zu halten und die Aufgaben als Methoden ausserhalb der Task unterzubringen.


    Der Dialog, den du dort aufbaust, ist so weit erst mal ok, aber wenn das in der Task steht, ist es immer noch in der Task und nicht im UI - und da müssen Dialoge gebaut werden.


    Leider fehlt auch, was du in der postExecute machst - das würde mir etwas mehr helfen... ;)


    LG
    Uwe