【问题标题】:How do I get the web service to execute before return statement?如何让 web 服务在 return 语句之前执行?
【发布时间】: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


【解决方案1】:

使用execute() 代替enqueue()。然后,确保在后台线程上调用 remindTheUser()

【讨论】:

  • 让我试试
  • 我试过了,但我遇到了困难......我编辑了这个问题以展示我如何尝试使用 execute()
  • @ThapeloM:“但我不断收到 android.os.NetworkOnMainThreadException”——正如我所写,请确保在后台线程上调用 remindTheUser()
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多