调用方法后为什么我的变量没有更新?

时间:2023-01-04 20:38:09
package my.package.name;

import android.content.DialogInterface;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    int x;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

        something();
        System.out.println(sumX); //this prints 0
    }

    private void something() {
        x = 6;
        System.out.println(sumX); //this prints 6
    }
}

It seems the order of execution is not happening like I want it to. On the console output, x = 0 gets printed before x = 6. Why is that? Does Android run method calls concurrently? It looks like my post is mostly code, so I'm adding some more details so that it can be posted.

似乎执行顺序没有像我想要的那样发生。在控制台输出上,在x = 6之前打印x = 0.为什么会这样? Android是否同时运行方法调用?看起来我的帖子主要是代码,所以我添加了一些更多细节,以便可以发布。

1 个解决方案

#1


0  

I tried your code and worked for me, otherwise to solve your problem you can try this:

我尝试了你的代码并为我工作,否则为了解决你的问题,你可以试试这个:

    try {
         something();
     } catch (Exception e) { 
     } finally { 
         System.out.println(x);
     }

or (Not very clear)

或(不太清楚)

something();
Handler handler = new Handler();
final Runnable runnable = new Runnable() {
    public void run() {
        System.out.println(sumX);
    }
};
handler.postDelayed(runnable, 50); //50 millisec (delay)

#1


0  

I tried your code and worked for me, otherwise to solve your problem you can try this:

我尝试了你的代码并为我工作,否则为了解决你的问题,你可以试试这个:

    try {
         something();
     } catch (Exception e) { 
     } finally { 
         System.out.println(x);
     }

or (Not very clear)

或(不太清楚)

something();
Handler handler = new Handler();
final Runnable runnable = new Runnable() {
    public void run() {
        System.out.println(sumX);
    }
};
handler.postDelayed(runnable, 50); //50 millisec (delay)