2017-09-06 26 views
-2

現在、変更されたメソッド(startRecording())の外部でグローバル変数(fileName)に加えられた変更を取得できない小さな問題に直面しています。今、何が起こるメソッド内の変更後もグローバル変数は変更されません

:私が欲しいものfileNameがstartRecording(で変更した後はnullのまま)

は次のとおりです。userRecordButtonのonClick内のファイル名を取得するために

それは基本的な問題のように見えますが、私はそれを解決するカント、意志すばやく手助けをしてください。前もって感謝します。

p/s:これは関連性のあるコード部分です。完全なコードが必要な場合は、私に連絡してください。

コード

public class WordAdapter extends ArrayAdapter<Word> { 
public String mFileName = null; 

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

final Button userRecordButton = (Button)listItemView.findViewById(R.id.recordButton); 

userRecordButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) {  
        if (!isRecording) { 
         userRecordButton.setText("Ready?"); 
         Handler delayRecord = new Handler(); 
         //This is where i called the handler 
         setDelayedRecord(delayRecord, userPlayButton, userRecordButton); 

      //The issue is here: it shows null when i tried debugging 
         String whatIsMyFileName = mFileName; 

         Handler maximumRecord = new Handler(); 
         setMaximumRecord(maximumRecord, userPlayButton, userRecordButton); 
        } else { 
         exeStopRecording(userPlayButton, userRecordButton); 
        } 
       } 
      } 
     }); 

} //End of getView 

    public void setDelayedRecord(Handler handler, final Button userPlayBtnReference, final Button userRecordBtnReference) { 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        //James!, this is where I called start recorder. 
        startRecording(); 
        userPlayBtnReference.setEnabled(false); 
       } catch (IllegalStateException e) { 
        Log.d("Hello", "Problem in start recording", e); 
       } 
       userRecordBtnReference.setText("Stop"); 
       Toast.makeText(mContext, "Started Recording", Toast.LENGTH_SHORT).show(); 
       setPathName(mFileName); 
      } 
     }, 500); 
    } 

private void startRecording() { 

     mFile = new File(Environment.getExternalStorageDirectory(), mFolder_main); 
     if (!mFile.exists()) { 
      mFile.mkdirs(); 
     } 

     formatter = new SimpleDateFormat("yyMMdd'-'HHmmssSSS"); 
     currentTime_1 = new Date(); 
     dateString = formatter.format(currentTime_1); 
     uniqueName = "Pronunce-" + dateString + ".3gp"; 
     mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     mFileName += "/" + mFolder_main + "/" + uniqueName; 
    //mFileName should no longer be null  

     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setOutputFile(mFileName); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     try { 
      mRecorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 
     isRecording = true; 
     mRecorder.start(); 
    } 

}//End of wordAdapter 
+1

userRecordButtonとは何ですか?あなたはどこでuserRecordButtonを初期化しましたか? – Raghavendra

+0

こんにちは@Raghavendra、それはgetView内で初期化されます –

+1

大丈夫、uはデバッグしましたか?その行が実行中であるかどうかどこで値を設定すると、 – Raghavendra

答えて

1

あなたがnullに設定されているグローバル変数、mFileNameを持っています。その後、イベントハンドラに移動し、新しいローカル変数、whatIsMyFileNameをグローバル変数の値nullに設定します。イベントハンドラのどの時点でも、ローカル変数またはグローバル変数の値を変更するメソッドを呼び出すことはありません。

+0

こんにちは、@ James Marshall、まずはお返事ありがとうございます。私のイベントハンドラの中で、メソッドstartRecording()を呼び出しました。 startRecordingメソッドの中でmFileNameの値を3回変更しました。 WhatIsMyFileNameの初期化コードはSetDelayedRecord以下であるため、mFileNameの値をnullから変更する予定はありませんか? –

+1

上記で提供したコードでは、startRecording()メソッドはイベントハンドラ内で呼び出されません(ブラケットを確認してください)。 –

+0

私は説明を更新しました。希望が役立ちます。完全なコードを表示することが適切であると思いますか、それはかなり長いです。 –

関連する問題