Callback-Fehler

  • Hallo hilfsbereite Community,


    ich bin es mal wieder. Ich beschäftige mich immernoch mit spiweview bzw. fragments. Momentan habe ich folgendes Problem: Ich habe eine schlichte app geschrieben, womit man ein sounddatei mittels play-buttons abspielen lässt. die app hat eine swipe-view, das heißt, eine sichtweise wo sich die buttons befinden (play,stop,exit) und eine andere sichtweise, wo die metadaten von der sounddatein also sprich song-interpreter, song-name, song-dauer, song-cover etc. wiedergegeben werden. zwischen diesen sichtweisen kann man wechselns indem man den aktuellen layout festhält und nach rechts oder links zieht (sollte eigentlich klar sein). Ergänzung: die sichtweise wo die metadaten angezeigt werden beinhaltet noch eine seekbar, welches sich bewegt, wenn ein song abgespielt wird.


    wie weit bin ich?
    momentan kann ich die sounds abspielen und alle metadaten werden angezeigt. ohne fehlermeldungen etc. auch die seekbar funzt soweit ganz gut.


    was möchte ich?
    ich möchte nun die parameter current_Time (aktuelle zeit/stelle des songs) und current_Duration (gesamtzeit des songs) angeben.
    und zwar sobald auf play gedrückt wird und der song abgespielt wird bis zum ende des songs, soll die zeiten angezeigt werden, wobei current_time jede sekunde halt hochgezählt werden soll


    wo liegt das problem?
    ich weiß es leider nicht :)
    ich habe ein anderes projekt wo ich keine spwipe-view bzw. fragments nutze und dort funktioniert alles wunderbar.


    hier sind die codes bzw. fehlermeldungen:



    Fehlermeldung:


    current_time und -duration müssen natürlich noch dementsrpechend für eine vernünftige zeitangabe umgerechnet werden, das weiß ich. es geht lediglich darum, dass, wenn ich sobald songDuration.setText("" + currentDuration + " / " + totalDuration); in die
    runnableTimeline-klasse eingebe diese fehlermeldung bekomme. das passiert nachdem ich auf den play-button klicke. die musik wird zwwar abgespielt, aber die app friert ein und stürzt letztendlich ab. nehme ich diese raus, wird zwar keine duration angezeigt, aber die app funktioniert wenigstens dann ohne fehlermeldung und absturz. aus der fehlermeldung werde ich auch nicht schlau. hat jmd. eine idee oder ratschlag woran das liegen könnte oder wie man das realisieren kann? würde mich für jede hilfe sehr freuen. danke im voraus

  • Hi Titus,


    danke für deinen Post. Hmm... ja du hast recht. Mit dem Handler habe ich das allerdings auch versucht (siehe im code unter songDuration.setText(..) steht handler.postDelayed(timelineMonitor,100); welches auskommentiert ist. mit dem Handler bekomme ich jedoch genau die gleiche fehlermeldung :-/

  • ich muss mich korrigieren. wenn ich die zeilen

    Code
    songDuration.setText(...);

    und

    Code
    handler.postDelayed(...)

    nicht eingebe, arbeitet die app ohne fehler und absturz. seekbar bewegt sich auch während der wiedergabe normal. wenn ich dann nur den zeilencode

    Code
    songDuration.setText(...);

    unterhalb der zeile 71 (seekbar.setProgress(currentTime)) eintrage, bekomme ich die folgende fehlermeldung:

    Code
    E/AndroidRuntime(10902): FATAL EXCEPTION: Thread-33702
    E/AndroidRuntime(10902): android.content.res.Resources$NotFoundException: String resource ID #0x0
    E/AndroidRuntime(10902):    at android.content.res.Resources.getText(Resources.java:260)
    E/AndroidRuntime(10902):    at android.widget.TextView.setText(TextView.java:3680)
    E/AndroidRuntime(10902):    at com.example.swipeview3.MainActivity$SongParameterFragment$runnableTimeline.run(MainActivity.java:311)
    E/AndroidRuntime(10902):    at java.lang.Thread.run(Thread.java:856)


    mit dem eintrag des handlers bekomme ich die fehlermeldung die ich als 1. gepostet habe. leider habe ich bis jetzt noch keine lösung gefunden und arbeite weiter daran. wenn jmd. eine idee hat, dann bitte ich, diese mit mir zu teilen. eventuell ist das keine große sache aber es fordert für mich viel zeit. danke im voraus.

  • Manchmal frage ich mich, ob Menschen die Logausgaben überhaupt lesen bevor sie sie irgendwo einstellen...


    Zitat

    E/AndroidRuntime(10902): android.content.res.Resources$NotFoundException: String resource ID #0x0


    Was auch immer du setText() für einen Parameter übergibst (Vermutlich ein R.string.text), er existiert nicht.
    Du hast ihn vermutlich vergessen in der strings.xml einzutragen.


    Und dein Handler-Ansatz muss eigentlich funktionieren.
    Das Problem ist, dass du songDuration.setText() außerhalb des Handlers aufrufst und dir damit alles um die Ohren fliegt.
    Du bist in der Runnable und willst auf ein View des Main Threads zugreifen. Das geht nicht und genau das erzählt dir auch das Log.


    Richtig wäre dein gewählter Ansatz schon gewesen:


    (Ich persönlich nenne meinen Handler stumpf 'uiThreadHandler', damit mir immer klar ist, dass das Ding auf den UIThread zugreift.)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

    Einmal editiert, zuletzt von Lucas de Vil ()

  • hey lucas de vil,


    danke schonmal für deinen post und hilfsbereitschaft.

    Zitat

    Manchmal frage ich mich, ob Menschen die Logausgaben überhaupt lesen bevor sie sie irgendwo einstellen...

    es tut mir wirklich sehr leid, es ist nicht so dass ich die logausgaben nicht durchlese, sondern eher das ich in meisten fällen es einfach nicht verstehe. ich google auch oft nach den fehlermeldungen, aber finde meistens keine vernünftigen lösungen.

    Zitat

    Das Problem ist, dass du songDuration.setText() außerhalb des Handlers aufrufst und dir damit alles um die Ohren fliegt.


    Du bist in der Runnable und willst auf ein View des Main Threads
    zugreifen. Das geht nicht und genau das erzählt dir auch das Log.

    und genau das hatte ich nicht verstanden. danke dir für aufklärung bzw. auch für deinen lösungsansatz. Es funktioniert jetzt einwandfrei. bedanke mich herzlich lucas. :)


    PS: das mit "uiThreadHandler"-benennung habe ich mir vermerkt. danke ;)

Jetzt mitmachen!

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