Android onCreate排序问题

Android onCreate排序问题,android,google-maps-android-api-2,Android,Google Maps Android Api 2,为了谷歌地图的目的,我正在尝试构建一个包含原点和目标gps坐标的字符串。我需要做的第一件事是获取我当前位置的gps坐标,因为这是原点。然后,我需要将这些坐标连接成一个更大的字符串,用于获取方向 我有获取这些坐标的代码,还有将它们连接成正确字符串格式的代码。然而,我的问题是我的字符串构建代码首先运行,这给我留下了空指针问题,因为字符串引用的是尚未处理的gps坐标 给你。gotLocation()方法来自于在以下方面实现通知: 运行此命令时的toast输出是“第二条消息”,后跟“第一条消息”。它们应

为了谷歌地图的目的,我正在尝试构建一个包含原点和目标gps坐标的字符串。我需要做的第一件事是获取我当前位置的gps坐标,因为这是原点。然后,我需要将这些坐标连接成一个更大的字符串,用于获取方向

我有获取这些坐标的代码,还有将它们连接成正确字符串格式的代码。然而,我的问题是我的字符串构建代码首先运行,这给我留下了空指针问题,因为字符串引用的是尚未处理的gps坐标

给你。gotLocation()方法来自于在以下方面实现通知:


运行此命令时的toast输出是“第二条消息”,后跟“第一条消息”。它们应该以相反的顺序显示。

获取位置是一个异步操作,您无法控制从系统获取答案的时间


在祝酒词出现之前,你如何确保找到卫星或手机垫

当然。但是有没有办法等到我有了呢?对不起。有没有办法强迫程序等待gps返回其坐标。现在,我并不担心我是否真的有关系。我稍后会建立这些检查。我知道我在测试期间有一个连接。也许我可以将这些线程分成不同的线程,并强制第二个线程等待。除了我不知道如何在Java中做到这一点。此外,我怀疑可能有一些方法已经实施了我感兴趣的排序。只是猜测而已。有什么想法吗?谢谢@usr55410,不要这样做。Android看起来很简单,但事实并非如此。我的意思是良好的编程实践和对平台的良好理解需要相当好的编程技能。您应该了解Android中的UI(或主)线程。在活动生命周期(如onCreate)的钩子方法期间,代码在UI线程上执行。此线程不应被阻止或冻结,因为它是重新绘制应用程序并接收用户输入的线程。如果你冻结它,你最多只能得到商店的坏分数和坏的用户体验,最坏的情况是ANR。重新思考你的程序,使你的数据异步。我从来没有说过安卓是容易的。但我正在寻找有关如何解决我的问题的建议。如果您使用此问题中的代码,则不能在“FirstMessage”之后显示“SecondMessage”:。只需在
gotLocation
内部执行
buildString()。
Public class DirectionsActivity extends Activity {

    String myLat, myLng;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Parser parser;

        LocationResult locationResult = new LocationResult(){
            @Override
            public void gotLocation(final Location location){
                try {
                    Double lat = location.getLatitude();
                    Double lng = location.getLongitude();
                    if (lat != 0.0 && lng != 0.0) {                      
                        myLat = Double.toString(lat);
                        myLng = Double.toString(lng);
                        String gps_location = myLat + " " + myLng;
                        Toast.makeText(getBaseContext(), "First Message", Toast.LENGTH_SHORT).show();
                    }
                }catch (Exception e) {

                }
            }
        };

        MyLocation myLocation = new MyLocation();
        myLocation.getLocation(this, locationResult);

        Toast.makeText(getBaseContext(), "Second Message", Toast.LENGTH_LONG).show();

        buildString();

        setContentView(R.layout.activity_directions);

    }