Java ProgressBar值不会更改

Java ProgressBar值不会更改,java,android,android-audiomanager,android-seekbar,Java,Android,Android Audiomanager,Android Seekbar,我想在内部类之外使用onProgressChanged方法的进度变量。我尝试使用在外部类中定义并从内部类调用的方法来获取该值。但每次我得到0。 没有更新的进度变量值。它基本上是一款android应用程序,用于获取SeekBar的更新值。 查看代码以更好地理解。目前,我只获得进度的上一个/最后一个值。在我更改值时不会立即获取更新值 Button gene; ImageView image; SeekBar ring_bar; String collect; private AudioManager

我想在内部类之外使用onProgressChanged方法的进度变量。我尝试使用在外部类中定义并从内部类调用的方法来获取该值。但每次我得到0。
没有更新的进度变量值。它基本上是一款android应用程序,用于获取SeekBar的更新值。
查看代码以更好地理解。目前,我只获得进度的上一个/最后一个值。在我更改值时不会立即获取更新值

Button gene;
ImageView image;
SeekBar ring_bar;
String collect;
private AudioManager am;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_prof);

    gene = (Button) findViewById(R.id.gene);
    image = (ImageView) findViewById(R.id.image);
    ring_bar = (SeekBar) findViewById(R.id.ring_bar);
    am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

    int maxV = am.getStreamMaxVolume(AudioManager.STREAM_RING);
    int curV = am.getStreamVolume(AudioManager.STREAM_RING);
    ring_bar.setMax(maxV);
    ring_bar.setProgress(curV);
    ring_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar arg0) {
        }

        @Override
        public void onStartTrackingTouch(SeekBar arg0) {
        }

        @Override
        public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
            am.setStreamVolume(AudioManager.STREAM_RING, progress, 0);
        }
    });

    int ring = ring_bar.getProgress();

    String ringgg = Integer.toString(ring);

    collect = ringgg;

    gene.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
            try{
                BitMatrix bitMatrix = multiFormatWriter.encode(collect, BarcodeFormat.QR_CODE,200,200);
                BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
                Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
                image.setImageBitmap(bitmap);
            }
            catch (WriterException e){
                e.printStackTrace();
            }

        }
    });
}

}您的问题是,您将onCreate中的进度保存到变量中,但此后再也不会更新该值

@Override
protected void onCreate(Bundle savedInstanceState) {
//....

int ring = ring_bar.getProgress();//Progress at the time of onCreate

gene.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try{
           //collect is still the same value since onCreate 
            BitMatrix bitMatrix = multiFormatWriter.encode(collect, BarcodeFormat.QR_CODE,200,200);
            //....
        }
        catch (WriterException e){
            e.printStackTrace();
        }

    }
});
要为当前值创建QR,必须在onClickListener中调用
getProgress()
。这将返回进度条的当前值

gene.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try{
            int ringtoneVolumeValue = ring_bar.getProgress();
            String ringtoneVolume = Integer.toString(ringtoneVolumeValue);
            BitMatrix bitMatrix = multiFormatWriter.encode(ringtoneVolume, BarcodeFormat.QR_CODE,200,200);
            //....
        }
        catch (WriterException e){
            e.printStackTrace();
        }

    }
});

那么你说的是
am.setStreamVolume
不起作用?我只是复制了你的代码,它对我来说很好。@Altoyer我关心的不是这个。我只想要进度值,因为我正在为更改的进度值生成QR。但我没有得到我现在更改的最新进度值。我只得到上次更改的值。ring_bar.getProgress()正在为我提供最后一个进度值,但我需要最新的进度值。明白我的意思了吗?非常感谢你发现了错误。它正在工作