无法访问Java中的全局变量的当前值

时间:2017-11-08 10:31:29

标签: java android json

下面是我的代码,lat_val和long_val没有使用 private bool _isVisible; public bool IsVisible { get { return _isVisible; } set { _isVisible = value; OnPropertyChanged(nameof(IsVisible)); } } 中JSON响应的接收值进行更新,它引用了默认值0,0。我希望全局变量在使用JSON响应进行引用和更新时不断更新。

btnShowLoc()

2 个答案:

答案 0 :(得分:1)

使用您分享的少量信息,然后给出

  

btnGetDevLoc()btnShowLoc()是在activity_main.xml中定义的应用程序中单击按钮时执行的函数

那个

  

首先调用btnGetDevLoc(),然后调用btnShowLoc()

当我打电话给AsyncTask时,我脑海中浮现出的第一件事是String尚未完成更新btnShowLoc()值。

因此,如果按顺序调用btnGetDevLoc()btnShowLoc(),则

... onClick() {
   btnGetDevLoc();
   btnShowLoc();
}

然后它很可能是由于我上面所说的。请记住,AsyncTask以异步方式运行(如名称所示......)。

你可以测试这个非常小的程序。

public static double var1 = 0.0;

public static void main(String[] args) {
    new Thread(() -> {
        var1 = 1.0;
    }).start();

    System.out.println(var1);
}

它几乎始终打印0.0,因为当主线程打印它时,var1的值还没有更新。

您应该做的是在btnShowLoc()结尾处发出onPostExecute(String)来电。这可以确保在更新新值后,您的方法仅被称为

答案 1 :(得分:-1)

当btnGetDevLoc()和btnShowLoc()调用时,我无法理解?你可以发布你的整个MainActivity吗?

编辑:

在您的AsyncTask完成其进程之前,您似乎调用了btnShowLoc()。 您可以通过这种方式更改代码,以确保在AsyncTask之后调用btnShowLoc():

public class ReadJSONFeedTask extends AsyncTask
        <String, Void, String> {
    protected String doInBackground(String... url) {
        return readJSONFeed(url[0]);
    }

    protected void onPostExecute(String result) {
        try {
            JSONObject jsonObject = new JSONObject(result);
            //JSONObject flags = new JSONObject(jsonObject.getString("flag"));
            JSONObject locationItems = new JSONObject(jsonObject.getString("response"));
            //Log.v("Location Details :", locationItems.toString());
            String []dev_loc = locationItems.toString().split("[\\s*,\\s*]");
            MainActivity.lat_val = dev_loc[0]; //"12.9934136";
            MainActivity.long_val = dev_loc[1]; //"80.2464206";

            btnShowLoc(dev_loc[0], dev_loc[1]);

        } catch (Exception e) {
            Log.d("ReadJSONFeedTask", e.getLocalizedMessage());
        }
    }
}

public void btnShowLoc(String latitude, String longitude) {

    //lat_val = "12.9934136";
    //long_val = "80.2464206";

    Intent in = new Intent(MainActivity.this, MapActivity.class);
    Bundle bundle = new Bundle();

    bundle.putString("latitude", latitude);
    bundle.putString("longitude", longitude);
    in.putExtras(bundle);
    startActivity(in);
}