与volley android的同步请求

时间:2016-09-21 21:19:08

标签: java php android request android-volley

我通过set方法更新全局变量时遇到问题。简而言之,情况如下:

  • 使用类(SessionHandler是此类的名称)来存储有关当前用户会话的信息(已登录),然后在set方法中,如果用户已记录,则会将布尔值设置为true in,否则为false。该变量初始化为FALSE。

  • 使用库实现登录逻辑与facebook,google plus,个性化登录。在这个类中有一个方法(customSignin),它根据登录是否成功返回一个布尔值。

           @Override        
        public boolean customSignin(SmartUser smartUser) {
    
        params = new ArrayList<>();
        params.add(smartUser.getUsername());
        params.add(smartUser.getPassword());
    
         StringRequest strReq = new LoginStringRequest().getStringRequest(params);
        AppController.getInstance().addToRequestQueue(strReq);
    
    
      if(SessionHandler.logged){
            return true;
        } else {
            return false;
        }
    
    }
    

然后TRUE =登录用户,FALSE =用户未登录。显然,如果用户存在于数据库中,则该值必须设置为true。 问题是,从发布的代码中可以看出: 在这个方法中,我调用另一个类来负责检查输入的值(用户名,密码)是否正确,对数据库进行检查,这样做使用库Volley,问题在于一个异步任务,在Volley onResponse方法中,如果数据是正确的隔垫,则通过set方法将其设置为布尔变量LOGGED的值。 我稍后需要在第一个(customSignin)的方法中验证布尔变量的值,即使登录信息正确,也始终将其设置为FALSE。 (然后从教育IF开始继续检查布尔值)。 这是凌空类的代码:

Code of Volley request

现在想知道是否有人能告诉我如何解决这个问题,你可以避免使用同步任务来解决这个问题吗?特别是,它通过排球,如果用户存在于数据库中,然后继续在customSignin方法中运行,则设置为true。

抱歉瑕疵,不幸的是使用翻译,感谢那些知道如何帮助我的人。

1 个答案:

答案 0 :(得分:0)

@Applefriend根据描述,我理解的是CustomSignIn方法中的代码使用volley异步进行网络调用,这将在请求完成后设置会话信息。

所以当你说

AppController.getInstance().addToRequestQueue(strReq); // Dispatch async call

if(SessionHandler.logged){ // This happens in the current UI thread (which be returning the default value or an exception
    return true;
} else {
    return false;
}

由于它是用户登录功能,为什么要以异步方式使用它?更好的方法是: 显示一个不确定的进度对话框并同步进行调用并返回值。

如果我的理解是错误的,请纠正我。