Java 在更新字段之前等待JSON响应完成
目前在我的应用程序中,我执行一个JSONDownloader,然后告诉我的应用程序等待一段时间,然后用检索到的数据更新字段。在更新字段之前,如何让应用程序等待JSONDownloader完成其任务 JSONDowloader类编写(节略)如下,并作为异步活动运行。这个类在需要时被调用,并设置全局变量,这些变量在被调用一段时间后会被更新。我希望在类完成运行后立即更新字段Java 在更新字段之前等待JSON响应完成,java,android,json,Java,Android,Json,目前在我的应用程序中,我执行一个JSONDownloader,然后告诉我的应用程序等待一段时间,然后用检索到的数据更新字段。在更新字段之前,如何让应用程序等待JSONDownloader完成其任务 JSONDowloader类编写(节略)如下,并作为异步活动运行。这个类在需要时被调用,并设置全局变量,这些变量在被调用一段时间后会被更新。我希望在类完成运行后立即更新字段 public class JSONDownloader extends AsyncTask<Object, Object,
public class JSONDownloader extends AsyncTask<Object, Object, Object>{
@Override
protected Object doInBackground(Object... params) {
if(JSONstate == false){
try {
final URL url = new URL("https://irrelevant");
final URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("Content-Type", "application/json; charset=utf-8");
urlConnection.connect();
final InputStream inputStream = urlConnection.getInputStream();
final StringBuilder sb = new StringBuilder();
while (inputStream.available() > 0) {
sb.append((char) inputStream.read());
}
System.out.println("up to setting string");
String result = sb.toString();
JSONObject jsonOrg = new JSONObject(result);
String ok = "ok";
Response = jsonOrg.getString("response");
System.out.println(Response);
if(Response.equals(ok)){
Settingsresponse = true;
orgName = jsonOrg.getString("orgName");
System.out.println("orgName" + orgName);
accessPointName = jsonOrg.getString("accessPointName");
System.out.println("accessPointName" + accessPointName);
lat = jsonOrg.getString("latitude");
System.out.println("lat" + lat);
longi = jsonOrg.getString("longitude");
System.out.println("longi" + longi);
floor = jsonOrg.getString("floor");
System.out.println("floor" + floor);
orgId = jsonOrg.getString("orgId");
System.out.println("orgId" + orgId);
}
else{
System.out.println("Data sent was erroneous");
Settingsresponse = false;
}
} catch (Exception e) {
System.err.print(e);
}
}
return null;
}
protected void onPostExecute(Void result){
}
}
公共类JSONDownloader扩展了异步任务{
@凌驾
受保护对象doInBackground(对象…参数){
if(JSONstate==false){
试一试{
最终URL=新URL(“https://irrelevant");
最终URLConnection URLConnection=url.openConnection();
setRequestProperty(“内容类型”,“应用程序/json;字符集=utf-8”);
urlConnection.connect();
final InputStream InputStream=urlConnection.getInputStream();
最终StringBuilder sb=新StringBuilder();
while(inputStream.available()>0){
sb.append((char)inputStream.read());
}
System.out.println(“直到设置字符串”);
字符串结果=sb.toString();
JSONObject jsonOrg=新的JSONObject(结果);
字符串ok=“ok”;
Response=jsonOrg.getString(“Response”);
System.out.println(响应);
如果(响应等于(确定)){
设置响应=真;
orgName=jsonOrg.getString(“orgName”);
System.out.println(“orgName”+orgName);
accessPointName=jsonOrg.getString(“accessPointName”);
System.out.println(“accessPointName”+accessPointName);
lat=jsonOrg.getString(“纬度”);
系统输出打印项次(“lat”+lat);
longi=jsonOrg.getString(“经度”);
System.out.println(“longi”+longi);
floor=jsonOrg.getString(“floor”);
系统输出打印项次(“楼层”+楼层);
orgId=jsonOrg.getString(“orgId”);
System.out.println(“orgId”+orgId);
}
否则{
System.out.println(“发送的数据错误”);
设置响应=错误;
}
}捕获(例外e){
系统错误打印(e);
}
}
返回null;
}
受保护的void onPostExecute(void结果){
}
}
JSONDownloader在需要的任何方法中调用,然后在调用之后立即调用;当前,在更新字段之前使用设置的时间,如下所示:
public void waitthencall()
{
long t0,t1;
t0=System.currentTimeMillis();
do{
t1=System.currentTimeMillis();
}
while (t1-t0<2000);
setfields();
}
public void waitthencall()
{
长t0,t1;
t0=System.currentTimeMillis();
做{
t1=System.currentTimeMillis();
}
而(t1-t0使用异步任务
可能会有帮助!使用异步任务
可能会有帮助!您需要一个回调侦听器来更新您的UI
创建一个回调侦听器,并在活动中或从更新UI的位置实现它。您需要一个回调侦听器来更新UI
创建一个回调监听器,并在您的活动中或从您正在更新UI的位置实现它。Dude,一旦doInBackGround完成处理,就调用onPostExecute方法从那里调用您的方法,它将确保doInBackGround已完成其执行。Dude,一旦doInBac完成,就调用onPostExecute方法kGround已经完成了处理并从那里调用了您的方法,它将向您保证doInBackGround已经完成了它的执行首先是JSONDownloader,从类的名称可以明显看出,但这不是一个库,我假定它是我们需要查看的自定义构建类。其次,我假定您将JSONDownloader任务作为AsyncTask而不是AsyncTask执行在UI线程上,您可以检查线程是否已完成,并在完成所有操作后执行操作。显示更多代码,以便我们提供帮助。编辑made:JSONDownloader类。在` protected void onPostExecute(void result){}中执行其余操作`。这不起作用。如果从这里调用,则不会运行该方法。首先,什么是JSONDownloader,从类的名称可以明显看出,但这不是一个库,我假定它是我们需要查看的自定义构建类。其次,我假定您将JSONDownloader任务作为AsyncTask执行,而不是在UI线程上执行,以便您可以检查线程是否已完成并完成完成所有操作后执行操作。显示更多代码以便我们提供帮助。编辑made:JSONDownloader类显示。在` protected void onPostExecute(void result){}中执行其余操作`。这不起作用。如果从此处调用该方法,则不会运行该方法。该代码已作为异步活动运行。问题是找到一种仅在JSONDownloader完成运行后运行后续代码的方法。该代码已作为异步活动运行。问题是找到一种仅在JSONDownloader完成运行后运行后续代码的方法SONDownloader已经运行完毕。谢谢,我会调查的。谢谢,我会调查的。