倒数计时器在我的 while 循环逻辑中被跳过,我不太确定为什么

问题描述 投票:0回答:1

我正在尝试以 1 秒的固定间隔打印 GPS 传感器的纬度和经度值。我试图以最简单的方式做到这一点,并在下面包含我的基本代码(请忽略格式和变量名称。我的项目只是一个测试,看看我是否可以访问手机传感器)。

onCreate
方法中: (我列出了所有必需的清单和运行时权限)

tv1 = (TextView) findViewById(R.id.tv1);
while(true)
                {
                    System.out.println("in while");
                    //tv1.append("IN WHILE");  //PROBLEM 2
                    new CountDownTimer(1000, 500)
                    {
                        @SuppressLint("MissingPermission")
                        public void onFinish()
                        {
                            fusedLocationClient.getCurrentLocation(LocationRequest.QUALITY_HIGH_ACCURACY, cancellationTokenSource.getToken());
//                                    addOnSuccessListener(this, new OnSuccessListener<Location>() {
//                                @Override
//                                public void onSuccess(Location location) {
//                                    latitude = location.getLatitude();
//                                    longitude = location.getLongitude();
//                                    System.out.println("LOCATION ACQUIRED!!!!!!!");
//                                }
//                            }).addOnFailureListener(this, new OnFailureListener() {
//                                @Override
//                                public void onFailure(@NonNull Exception e) {
//                                    System.out.println("LOCATION FAILED!!!!!!!!!");
//                                }
//                            });
                            System.out.println("in timer 2"); //PROBLEM 1
                            tv1.append("IN timer 2");
                            workGPS();

                        }
                        public void onTick(long millisUntilFinished)
                        {
//                              // millisUntilFinished    The amount of time until finished.
                        }
                    }.start();
                }

这里有两个问题:

  1. “在计时器中”文本永远不会被打印。在日志或文本视图中。这告诉我倒数计时器可能没有进入。

  2. 注释行

    tv1.append("IN WHILE");
    抛出错误
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.append(java.lang.CharSequence)' on a null object reference

我认为问题2是我这边的一个错误——对一些概念的理解不够好。但我不确定问题 1。你能帮我理解我做错了什么吗?

java android
1个回答
0
投票

问题1)

不是 100% 清楚,但是您的

while(true)
循环可能会阻塞主线程,因此
CountDownTimer
永远不会执行?

您可以尝试使用

Handler
,它每 X 毫秒发布一个可运行的内容。

handler = new Handler(Looper.getMainLooper());

runnable = new Runnable() {
  @Override
  public void run() {
    fusedLocationClient.getLastLocation()
      .addOnSuccessListener(new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
          [...]
        }
      })
      .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
          [...]
        }
      });

    handler.postDelayed(this, 500);
  }
};

handler.post(runnable);

不要忘记

handler.removeCallbacks(runnable)
当活动被破坏时

问题2)

我猜

tv1
未初始化。您在
setContentView
之前打电话给
findViewById
吗?

© www.soinside.com 2019 - 2024. All rights reserved.