Progresbar mit einem Händler aktualisieren

  • Antworten:1
  • Bentwortet
Robbiani Renato
  • Forum-Beiträge: 606

20.05.2020, 14:24:39 via Website

Hallo zusammen

Ich möchte die Progresbar mitels eines Händler aktualiesieren. Aber das ganze stürzt mit einem nullpointer Exception ab. Ich weiss aber nicht was ich falsch mache.

package ch.robbisoft.kck_app;

import android.content.Context;
import android.media.MediaPlayer;
import android.os.Handler;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.RadioGroup;

public class Neu extends AppCompatActivity{

private MediaPlayer mp;
private Integer n_lied;
private Context ctx;
private Integer n_laenge;

//neue Version
private RadioGroup obj_liedwahl;
private ImageButton obj_start;
private ImageButton obj_pause;
private ImageButton obj_stop;
private ProgressBar obj_dauer;
private Handler ereignis;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_neu);

    //Neue Version ab hier 19. Mai 2020
    ctx = getApplication();
    n_lied = R.raw.lied_1;

    obj_liedwahl = (RadioGroup) findViewById(R.id.grp_lied);
    obj_start = (ImageButton) findViewById(R.id.btn_start);
    obj_pause = (ImageButton) findViewById(R.id.btn_pause);
    obj_stop = (ImageButton) findViewById(R.id.btn_stop);
    obj_dauer = (ProgressBar) findViewById(R.id.prb_lied);

    ereignis = new Handler();
    ereignis.post(new Runnable() {
        @Override
        public void run() {
            obj_dauer.setProgress(100 * mp.getCurrentPosition() / mp.getDuration());
            if(mp.isPlaying()) {
                ereignis.postDelayed((Runnable) ctx, 500L);
            }
        }
    });

    obj_liedwahl.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
                case R.id.rad_eins:
                    n_lied = R.raw.lied_1;
                    break;
                case R.id.rad_zwei:
                    n_lied = R.raw.lied_2;
                    break;
                case R.id.rad_drei:
                    n_lied = R.raw.lied_3;
                    break;
                case R.id.rad_vier:
                    n_lied = R.raw.lied_4;
            }
        }
    });
    obj_start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mp = (MediaPlayer) MediaPlayer.create(ctx, n_lied);
            n_laenge = mp.getDuration();
            ereignis.postDelayed((Runnable) ctx, 500L);
            mp.start();
        }
    });
    obj_pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mp != null) {
                if (mp.isPlaying()){
                    mp.pause();
                }else {
                    mp.start();
                }
            }
        }
    });
    obj_stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mp != null) {
                mp.stop();
                mp.release();
            }
        }
    });
}

@Override
protected void onResume() {
    super.onResume();
    if( mp != null ){
        mp.stop();
        mp.release();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if( mp != null ){
        mp.stop();
        mp.release();
    }
}

}

Was mache ich falsch?

Gruss Renato

Kommentieren
Beste Antwort
Robbiani Renato
  • Forum-Beiträge: 606

20.05.2020, 15:40:46 via Website

So geht es!

        ereignis = new Handler();

    runable = new Runnable() {
        @Override
        public void run() {
            obj_dauer.setProgress(100 * mp.getCurrentPosition() / mp.getDuration());
            if(mp.isPlaying()) {
                ereignis.postDelayed(runable, 500L);
            }
        }
    };

Da hatte ich wohl mehrere Fehler gemacht.

Hilfreich?
Pascal P.
Kommentieren