为什么 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()