我有完全相同的方法并在onRefresh()和onRestart()中调用,但由于某种原因onRestart()完成了我想要的,但onRefresh()的行为却不同。我想要发生的是让应用程序了解何时在运行时禁用该位置。
onRestart()执行此操作:启动应用程序,获取预测数据,从状态栏禁用位置,按主页按钮再次打开应用程序。正如预期的那样,onRestart()尝试检查GPS状态(使用gpsTracker.getIsGPSEnabled()),看到该位置被禁用,并发送相应的Toast消息。
onRefresh()执行此操作:启动应用程序,获取预测数据,从状态栏禁用位置,甚至等待几秒钟,然后刷新应用程序。出乎意料的是,onRefresh()会发送“Data Refreshed”toast,即使它获得“null,null”作为位置纬度和经度。
我也可以提供其他代码,但如果其余代码出现问题,为什么onRestart()会按照我想要的方式运行?我没有收到任何错误。任何帮助将受到高度赞赏。感谢。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
final GPSTracker gpsTracker = new GPSTracker(this);
mSwipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(false);
if (gpsTracker.getIsGPSTrackingEnabled()) {
gpsTracker.getLocation();
getForecast(gpsTracker);
Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
}
}
}, 3000);
}
});
}
@Override
protected void onRestart() {
super.onRestart();
final GPSTracker gpsTracker = new GPSTracker(this);
new Handler().postDelayed (new Runnable ()
@Override public void run() {
gpsTracker.getLocation();
if (gpsTracker.getIsGPSTrackingEnabled()) {
getForecast(gpsTracker);
Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
}
}
}, 3000);
}
答案 0 :(得分:1)
onRestart您创建了一个新的GPSTracker实例。尝试更新onRefresh中的GPSTracker处理程序。 试一试
答案 1 :(得分:1)
@Override
public void onRefresh() {
final GPSTracker gpsTracker = new GPSTracker(MainActivity.this);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(false);
if (gpsTracker.getIsGPSTrackingEnabled()) {
gpsTracker.getLocation();
getForecast(gpsTracker);
Toast.makeText(MainActivity.this, "Data Refreshed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Location is not enabled", Toast.LENGTH_LONG).show();
}
}
}, 3000);
}
});