2017-01-01 45 views
0

最初の回答hereを使用して、オーディオファイルの再生中に進行状況を表示するシークバー(timeSlider)を更新して繰り返しタスクを開始しようとしています。繰り返し機能はupdateTimeSlider()です。 postDelayedで開始された場合、updateTimeSliderは "シンボルを解決できません"というエラーを表示します(この記事の最後にある画像を参照)。 updateTimeSlider()は、単独で行(イメージにも示されています)しているときにそのエラーを表示しません。Android Java:postDelayedで「解決できません」

(単独行でupdateTimeSlider()コードが行くか本当にないことに注意してください。それがその位置に機能することを実証するだけであります。)

誰も私の中で問題を修正する方法を理解するのに役立つことができますpostDelayed行ですか?

dodoUpdateTimeSliderに書き込むことを忘れたことを何人かの人々が示唆しています。忘れなかった。 updateTimeSliderdoなし)を実行したかったが、これは正常に実行され、postDelayed以外のエラーは発生しません。 updateTimeSliderは次のようになり、このJavaファイルの一番下に文を使用してJNI(Javaネイティブ・インターフェース)を介して使用C++の関数である:

private native void updateTimeSlider(); 

物事のJNIの側面は、正常に動作している、とupdateTimeSlider()は、方法IでありますdoUpdateTimeSliderではなく、実行しようとしています。

脇には、doUpdateTimeSliderを入れてみました。また、エラー:Variable doUpdateTimeSlider may not have been initializedとなりました。

not initialized error

また、私は実際にtimeSliderシークバーを更新することにはコードがないので、私はdoUpdateTimeSliderを実行することができれば、それは私にどうなる良いものを見ていません。

public class PlayActivity extends AppCompatActivity { 

private static final String TAG = "PlayActivity"; 
boolean playing = false; 
private int timeSliderInterval = 1000; // 1 second 
private Handler timeSliderHandler; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_play); 

    final Runnable doUpdateTimeSlider = new Runnable() { 
     @Override 
     public void run() { 
      timeSliderHandler.postDelayed(updateTimeSlider, timeSliderInterval); 
      updateTimeSlider(); 
     } 
    }; 

enter image description here

+4

これは 'updateTimeSlider'の代わりに' doUpdateTimeSlider'です –

+0

http://stackoverflow.com/questions/19931397/variable-r-might-not-have-been-initialized – trooper

+1

私はあなたが "あなたの 'doUpdateTimeSlider'をメンバ変数(vs local)にすることで初期化されました。あなたが見せているものとコピーしているものとの主な違いは範囲です。あなたのコードは 'onCreate'のスコープ内でローカルです。 – trooper

答えて

1

あなたがここに見ることができるように:https://stackoverflow.com/a/41413191/4409113

それは次のとおりです。doUpdateTimeSlider

final Runnable doUpdateTimeSlider = new Runnable() { 
    @Override 
    public void run() { 
     timeSliderHandler.postDelayed(doUpdateTimeSlider, timeSliderInterval); 
     updateTimeSlider(); 
    } 
}; 

@のρяσѕρєяKは同じことを言ったどの。

更新:だから

variable r might not have been initialized

"Variable example might not have been initialized" in anonymous class

あなたはこれらのリンクをたどることができmay not have been initializedことを修正するには

final Runnable etc = null; 
    final Runnable doUpdateTimeSlider = new Runnable() { 
     @Override 
     public void run() { 
      timeSliderHandler.postDelayed(etc, timeSliderInterval); 
      updateTimeSlider(); 
     } 
    }; 

これは今すぐ動作するはずです!

+0

あなたのおかげで、@モーセン。 doUpdateTimeSliderもエラーを生成します。しかし、実際にtimeSliderのシークバーを更新するためのコードがないので、doUpdateTimeSliderを実行できるとすれば、何が良いのでしょうか?私はこれを私の質問に加えました。 – user1147171

+0

@ user1147171 - 私は答えを編集/更新しました。この回答を読むことも忘れないでください:http://stackoverflow.com/a/35204885/4409113 – Mohsen

1

あなたは置き換えることができます:

timeSliderHandler.postDelayed(updateTimeSlider, timeSliderInterval); 

で:

timeSliderHandler.postDelayed(doUpdateTimeSlider, timeSliderInterval); 

あなたはdoUpdateTimeSliderdoを書くのを忘れていました。

+0

あなたの提案に感謝しますが、私は忘れませんでした。 updateTimeSliderは私が実行しようとしていたものです。私もdoUpdateTimeSliderを試しましたが、エラーも発生します。私はすべてこれを質問に加えました。 – user1147171

+0

'doUpdateTimeSlider'はあなたのRunnableの名前ですか?それはあなたが 'postDelayed'にしようとしているはずのことです。' run'で持っている他のコードは実際の更新を行うべきです。これは 'updateTimeSlider'に含まれているものです。 – trooper

関連する問題