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()
my
onCreate
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内部的
getLocation()
之后,是否尝试了其他方法?例如
Log.d(“WeatherActivity”,“您的日志”)
甚至设置断点?也许文本视图不显示文本,因为它太快,几乎立即显示OnSuccess回调提供的文本。非常感谢!我明白了