Android 为什么onCreate方法不';使用Google Play services location API获取位置后,是否执行下一行?
在我的Android 为什么onCreate方法不';使用Google Play services location API获取位置后,是否执行下一行?,android,android-activity,geolocation,oncreate,Android,Android Activity,Geolocation,Oncreate,在我的onCreate方法中getLocation()方法使用Google Play services位置API获取信息。它工作得很好,但是在执行getLocation()myonCreatemethod之后,不会执行下一行代码。在完成getLocation()之后,我应该如何执行我的onCreate方法中的下一行?谢谢 public class WeatherActivity extends AppCompatActivity { FusedLocationProviderC
onCreate
方法中getLocation()
方法使用Google Play services位置API获取信息。它工作得很好,但是在执行getLocation()
myonCreate
method之后,不会执行下一行代码。在完成getLocation()
之后,我应该如何执行我的onCreate
方法中的下一行?谢谢
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");
}
}
});
}
}
公共类WeatherActivity扩展了AppCompatActivity{
FusedLocationProviderClient mFusedLocationClient;
TextView位置TextView;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动和天气);
locationTextView=(TextView)findViewById(R.id.locationTextView);
getLocation();
//下一行不执行
locationTextView.setText(“此文本将永远不会出现”);
}
私有void getLocation(){
mFusedLocationClient=LocationServices.getFusedLocationProviderClient(此);
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
返回;
}
mFusedLocationClient.getLastLocation()文件
.addOnSuccessListener(此,新的OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
//将文本设置为文本视图
locationTextView.setText(“此文本正常”);
}
}
});
}
}
行没有执行,或者它的行为与您期望的不一样?您是否在那里设置了断点并调试了它
在我看来,行执行得很好,但文本很快就会被onSuccess
回调覆盖
onSuccess
不会立即被调用,而是在将来某个时间被调用。因此,很可能行locationTextView.setText(“此文本将永远不会出现”)在onSuccess
中执行代码之前,必须移动locationTextView.setText(“此文本将永远不会出现”)因为一旦onCreate方法执行activity cycle的下一个方法即onSuccess()在调用onCreate内部的getLocation()
之后,是否尝试了其他方法?例如Log.d(“WeatherActivity”,“您的日志”)
甚至设置断点?也许文本视图不显示文本,因为它太快,几乎立即显示OnSuccess回调提供的文本。非常感谢!我明白了