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