为什么 onCreate 方法在使用 Google Play 服务位置 API 获取位置后不执行下一行?
Why onCreate method doesn't execute next lines after getting location with Google Play services location APIs?
在我的 onCreate
方法中,getLocation()
方法使用 Google Play 服务位置 API 获取信息。它运行良好,但在执行 getLocation()
之后,我的 onCreate
方法 不执行下一行代码。 我应该如何执行 [=] 中的下一行用 getLocation()
完成后的 12=] 方法?谢谢!
public class WeatherActivity extends AppCompatActivity {
FusedLocationProviderClient mFusedLocationClient;
TextView locationTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weather);
locationTextView = (TextView) findViewById(R.id.locationTextView);
getLocation();
//Next line doesn't execute
locationTextView.setText("THIS TEXT WILL NEVER APPEAR");
}
private void getLocation() {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
//Setting text to TextView
locationTextView.setText("THIS TEXT IS OK");
}
}
});
}
}
该行没有执行,或者它的行为不符合您的预期?你有没有在那里设置断点并调试它?
对我来说,该行似乎执行得很好,但文本很快被 onSuccess
回调覆盖。
onSuccess
不会立即被调用,而是在未来某个时间被调用。所以 locationTextView.setText("THIS TEXT WILL NEVER APPEAR");
行很可能在 onSuccess
中的代码之前执行
您必须将 locationTextView.setText("THIS TEXT WILL NEVER APPEAR");
移动到另一个方法,因为一旦 onCreate 方法执行 activity 循环的下一个方法就会执行,即 onSuccess()
在我的 onCreate
方法中,getLocation()
方法使用 Google Play 服务位置 API 获取信息。它运行良好,但在执行 getLocation()
之后,我的 onCreate
方法 不执行下一行代码。 我应该如何执行 [=] 中的下一行用 getLocation()
完成后的 12=] 方法?谢谢!
public class WeatherActivity extends AppCompatActivity {
FusedLocationProviderClient mFusedLocationClient;
TextView locationTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weather);
locationTextView = (TextView) findViewById(R.id.locationTextView);
getLocation();
//Next line doesn't execute
locationTextView.setText("THIS TEXT WILL NEVER APPEAR");
}
private void getLocation() {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
//Setting text to TextView
locationTextView.setText("THIS TEXT IS OK");
}
}
});
}
}
该行没有执行,或者它的行为不符合您的预期?你有没有在那里设置断点并调试它?
对我来说,该行似乎执行得很好,但文本很快被 onSuccess
回调覆盖。
onSuccess
不会立即被调用,而是在未来某个时间被调用。所以 locationTextView.setText("THIS TEXT WILL NEVER APPEAR");
行很可能在 onSuccess
您必须将 locationTextView.setText("THIS TEXT WILL NEVER APPEAR");
移动到另一个方法,因为一旦 onCreate 方法执行 activity 循环的下一个方法就会执行,即 onSuccess()