【发布时间】:2018-08-28 03:12:49
【问题描述】:
我有一个从 Web 服务调用返回布尔值的方法。 问题是它正在执行 return 语句(每次调用该方法时返回一个 false 值)然后返回该方法并在之后执行 Web 服务调用(这给出了一个未返回的 true 值。
我试过了:
- 添加 finally 子句
- 添加一个条件语句,如果调用尚未执行,则值为 0,如果已执行,则值为 1
- 我也尝试过使用 new Thread() 但无济于事
- 我还尝试查看是否是我在通话中做错了什么,我所做的只是用作 if 语句的条件
public boolean remindTheUser(RemindTheUser remindTheUser) throws Exception {
RequestObject request = Retrofit.getRetrofitInstance().create(RequestObject.class);
final Call < JsonElement > jsonElementCall = request.callService(remindTheUser);
jsonElementCall.enqueue(new Callback < JsonElement > () {
@Override
public void onResponse(Call < JsonElement > call, Response < JsonElement > response) {
if (response.isSuccessful()) {
try {
String responseString = response.body().getAsJsonObject().toString().trim();
JSONObject reader = new JSONObject(responseString);
status = reader.getBoolean("status");
} catch (JSONException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}
}
@Override
public void onFailure(Call < JsonElement > call, Throwable t) {
t.printStackTrace();
}
});
return status;
}
如何让网络服务执行THEN返回状态值
status 是一个全局变量
已编辑 我尝试使用 cmets 的建议修复错误的解决方案是这样做:
try {
RequestObject request = Retrofit.getRetrofitInstance().create(RequestObject.class);
Call<JsonElement> call = request.callService(remindTheUser);
JsonElement tasks = call.execute().body();
//String responseString = tasks.body().getAsJsonObject().toString().trim();
String responseString = tasks.getAsJsonObject().toString().trim();
JSONObject reader = new JSONObject(responseString);
status = reader.getBoolean("status");
}catch(Exception ex){
throw ex;
}
return status;
但我不断收到 android.os.NetworkOnMainThreadException
【问题讨论】:
-
您不会从具有
Asynchronous调用的方法返回。在回调方法中做你的事情。使用回调来通知。 -
@ADM 让我试试
-
@ADM 请检查我的更新和帮助
标签: java android boolean retrofit return-value