【问题标题】:Threading and Progressbar in Android?Android中的线程和进度条?
【发布时间】:2015-08-25 03:32:34
【问题描述】:

大家好,我正在尝试显示用户与他们可以看到的卡片上某个位置之间的 gps 距离。问题是,我认为主线程分裂或一次做两件事。在下面的代码中,Android 在执行 if(flag) 语句中的代码时会敬酒……所以它会在不获取用户坐标的情况下敬酒 GPS 差异……我该如何做到这一点,如果(flag) 语句首先然后在 if 语句之后和之外继续敬酒?

@Override
public void onResume()
{
    super.onResume();
    ImagePath = getIntent().getStringExtra("imagePath");
    if(ImagePath == null)
    {
        Toast.makeText(this,"hello everyone",Toast.LENGTH_LONG).show();
    }
    if(newCardAdded)
    {
        flag = displayGpsStatus();
        if(flag)
        {
            editLocation.setText("Please!! move your device to" +
                    " see the changes in coordinates." + "\nWait..");
            pb.setVisibility(View.VISIBLE);
            locationListener = new MyLocationListener();//LocationListener actually physically gets your location
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);


        }
        else
        {
            alertbox("Gps Status!!", "Your GPS is: OFF");
        }
            Global_Class.getInstance().getValue().getlatitude = place_lat;
            Global_Class.getInstance().getValue().getlongitutde = place_lon;
            String gps_distance = String.valueOf(gps_difference(user_lon, user_lat,place_lon,place_lat));
            Toast.makeText(this, gps_distance, Toast.LENGTH_LONG).show();

    }

}

【问题讨论】:

  • 如果应该显示 gps_distance 的 toast 不能正常工作,它会显示什么?你怎么知道它发生在if(flag) 语句块的中间?
  • 所以在另一个活动中,我获取了一家餐馆的 GPS 坐标,我想为用户位置(我在这个活动中得到)和餐厅的位置(在另一个活动中)之间的距离干杯。因此,它只是在运行进度条尝试检索用户位置的同时显示餐厅位置。

标签: java android multithreading gps onresume


【解决方案1】:

LocationManager#requestLocationUpdates

您的locationListener 必须实现onLocationChanged(Location) 方法,每次位置更新都会调用该方法。然后计算距离并用该方法祝酒。因为requestLocationUpdates(...)在另一个线程中运行,所以无法确认它是否在Toast.makeText(...)之前完成,所以你必须使用你的MyLocationListener

【讨论】:

  • 这是唯一的方法吗?我必须在 onLocationChanged 中祝酒吗?有没有办法让它成为一个线程或确保 requestLocationUpdates 不会在另一个线程上运行?
  • 你认为如果我放置一个布尔语句(称之为“gps_check”并最初将其设置为 false)然后在 onLocationChanged 中将该布尔语句设置为 true。然后,稍后再做一个 if 语句来检查 gps_check 是否为真,然后执行 toast?
  • 不,你不能那样做。因为你不知道gps_check 何时为真。您不知道您的 if 语句在设置 gps_check 之前或之后运行。使用onLocationChanged() 是正确的方法,这就是所谓的“回调”。
  • 其实requestLocationUpdates在主线程上运行,它只是一个快速的“请求”,你想知道用户位置何时改变。之后会调用in的一些内部方法,你不能修改它们,所以跟合并线程没有关系。
  • 伙计,这真是太棒了。是的,我只是想找到一种解决方法。但是谢谢伙计。
猜你喜欢
  • 2018-10-30
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多