onRestart() 和 onRefresh() 行为不同,代码相同
onRestart() and onRefresh() Act Different with Same Code
我在 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);
}
onRestart 你创建一个新的 GPSTracker 实例。尝试在 onRefresh 中更新您的 GPSTracker 处理程序。
试一试
@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);
}
});
我在 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);
}
onRestart 你创建一个新的 GPSTracker 实例。尝试在 onRefresh 中更新您的 GPSTracker 处理程序。 试一试
@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);
}
});