有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android Java:postDelayed中的“无法解析”

我使用第一个答案here尝试启动一个重复任务,更新一个seekbar(“timeSlider”),以在音频文件播放时显示进度。重复函数是updateTimeSlider()。当通过postDelayed启动时,updateTimeSlider会给出一个“无法解析符号”错误(参见本文底部的图片)updateTimeSlider()单独在一条线上时不会给出该错误(也在图中显示)

(请注意,updateTimeSlider()行本身并不是真正的代码运行方式。它只是为了证明它在该位置工作。)

有人能帮我理解如何纠正postDelayed行中的问题吗

有几个人建议我只是忘了在doUpdateTimeSlider中写do。我没有忘记。我想执行updateTimeSlider(没有do),它执行得很好,不会在postDelayed之外产生错误^{< CD3>}是一个C++函数,它使用JNI(java本地接口),使用java文件底部的一个语句,如下所示:

private native void updateTimeSlider();

JNI方面工作得很好,updateTimeSlider()是我试图执行的方法,而不是doUpdateTimeSlider

顺便说一句,我确实试着把doUpdateTimeSlider放在那里,结果也出现了一个错误:Variable doUpdateTimeSlider may not have been initialized

not initialized error

我也不知道如果我能执行doUpdateTimeSlider会对我有什么好处,因为里面没有代码来实际更新timeSliderseekbar

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


共 (2) 个答案

  1. # 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();
            }
        };
    

    现在应该可以了

  2. # 2 楼答案

    你可以替换:

    timeSliderHandler.postDelayed(updateTimeSlider, timeSliderInterval);
    

    与:

    timeSliderHandler.postDelayed(doUpdateTimeSlider, timeSliderInterval);
    

    你忘了在doUpdateTimeSlider中写do