1

onPostExecute メソッドが次の AsyncTask を持っています。

protected void onPostExecute(String args) {


            final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
            int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
            int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View layout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) findViewById(R.id.dialog_root_element));


            AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);
            builder.setView(layout)
                    .setMessage(name)
                    .setTitle("playing...")
                    .setCancelable(false)
                    .setNeutralButton("stop/volver",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    mediaPlayer.stop();
                                    dialog.cancel();
                                }
                            });
            alert = builder.create();

            alert.show();

            SeekBar volControl = (SeekBar)findViewById(R.id.dialog_seekbar);
            volControl.setMax(maxVolume);
            volControl.setProgress(curVolume);
            volControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onStopTrackingTouch(SeekBar arg0) {
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) {
                }

                @Override
                public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
                    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
                }
            });


            mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    mediaPlayer.stop();
                    alert.dismiss();
                }
            });

            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                }
            });

        }

エラーは次のとおりです。

volControl.setMax(maxVolume);

しかし、理由がわかりません... (デバッグモードでは、maxVolume は 15 です)

ボリューム コントロールの seekBar を使用してダイアログを実行しようとしていますが、エラーが表示されません。AsyncTask でサウンドの音量を変更できますか?

どうもありがとう!

4

1 に答える 1

1

findViewById間違ったオブジェクトを呼び出しています。コードはアクティビティのレイアウトファイルであなたを探していますSeekBarが、おそらく存在していません(nullポインタ例外が発生していると思います)。

これを試して、ダイアログを表示してから、を見つけるためのアクティビティではなく、ダイアログを呼び出しfindViewByIdてください。SeekBar

alert.show();
SeekBar volControl = (SeekBar)alert.findViewById(R.id.dialog_seekbar);

ここで重要なのはalert.findViewById()です。

于 2012-07-11T16:52:43.390 に答える