我正在使用第一个答案here尝试启动重复任务,更新搜索栏(“timeSlider”)以在播放音频文件时显示进度。重复功能是updateTimeSlider()
。当通过postDelayed
启动时,updateTimeSlider
会出现“无法解析符号”错误(请参阅本文底部的图片)。 updateTimeSlider()
在单独一行时也不会出现该错误(也显示在图像中)。
(请注意,行上的updateTimeSlider()
本身并不是代码的真实方式。只是为了证明它在那个位置工作。)
任何人都可以帮助我了解如何纠正postDelayed
行中的问题吗?
有些人建议我忘记在do
中写下doUpdateTimeSlider
。我没忘记。我想执行updateTimeSlider
(没有do
),它执行得很好并且不会在postDelayed
之外产生错误。 updateTimeSlider
是通过JNI(Java Native Interface)使用的C ++函数,它使用此Java文件底部的语句,如下所示:
private native void updateTimeSlider();
JNI方面的工作正常,updateTimeSlider()
是我尝试执行的方法,而不是doUpdateTimeSlider
。
顺便说一下,我确实尝试将doUpdateTimeSlider
放在那里,这也会导致错误:Variable doUpdateTimeSlider may not have been initialized
。
如果我可以执行doUpdateTimeSlider
,我也看不出它有什么用处,因为它没有代码来实际更新timeSlider
搜索栏。
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();
}
};
答案 0 :(得分:1)
正如您在此处所见:https://stackoverflow.com/a/41413191/4409113
是doUpdateTimeSlider
final Runnable doUpdateTimeSlider = new Runnable() {
@Override
public void run() {
timeSliderHandler.postDelayed(doUpdateTimeSlider, timeSliderInterval);
updateTimeSlider();
}
};
其中@ρяσѕρєяK也说了同样的话。
<强>更新强>
要修复may not have been initialized
,您可以按照以下链接进行操作:
variable r might not have been initialized
"Variable example might not have been initialized" in anonymous class
所以:
final Runnable etc = null;
final Runnable doUpdateTimeSlider = new Runnable() {
@Override
public void run() {
timeSliderHandler.postDelayed(etc, timeSliderInterval);
updateTimeSlider();
}
};
现在应该可以使用了!
答案 1 :(得分:1)
您可以替换:
timeSliderHandler.postDelayed(updateTimeSlider, timeSliderInterval);
使用:
timeSliderHandler.postDelayed(doUpdateTimeSlider, timeSliderInterval);
您忘记在do
中写doUpdateTimeSlider
。