2016-09-21 3 views
0

set 메소드를 통해 전역 변수를 업데이트하는 데 문제가 있습니다. 한마디로 상황은 다음발리 안드로이드를 사용한 동기 요청

  • 나을 설정하는 다음 set 메소드 내에서 (SessionHandler이 클래스의 이름입니다) (로그인) 현재 사용자 세션에 대한 정보를 저장하는 클래스를 사용하여 사용자가 로그인 한 경우 부울 값을 true로, 그렇지 않으면 false를 반환합니다. 변수는 FALSE로 초기화됩니다.

  • 라이브러리를 사용하여 로그인 로직을 페이스 북, google 플러스 개인 로그인으로 구현합니다. 이 클래스에는 로그인이 성공했는지 여부에 따라 부울을 반환하는 메서드 (customSignin)가 있습니다. 로그인 한 사용자 그런 TRUE

     @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; 
        } 
    
    } 
    

은 = FALSE = 사용자가 접속되지 않았습니다. 사용자가 데이터베이스에 존재하는 경우 물론, 값이 true로 설정해야합니다. 게시 된 코드에서 볼 수있는 것처럼 문제가 있습니다 : 이 메서드 내에서 입력 된 값 (사용자 이름, 암호)이 올바른지 확인하는 다른 클래스를 호출하고 데이터베이스를 사용하려면 라이브러리 발리 (Volley) 라이브러리를 사용하고, 문제는 Volley onResponse 메서드 내에서 비동기 작업이되는 것입니다. 데이터가 부울 변수 LOGGED의 값을 사용하여 TRUE로 설정됩니다. 나중에 로그인 정보가 맞더라도 항상 FALSE로 설정된 부울 변수의 값을 확인하려면 첫 번째 메소드 (customSignin)에서 나중에 필요합니다. (그런 다음 교육 IF에서 시작하는 부울을 계속 확인하십시오.) 이는 발리 클래스의 코드는 다음과 같습니다

Code of Volley request

이제 누군가가 내가이 문제를 해결하는 방법을 말해 줄 수 있다면, 당신은 상황을 해결하기 위해 동기 작업을 사용하여 피할 수 궁금해? 특히, 사용자가 데이터베이스에 존재하고 customSignin 메소드에서 계속 실행하면 배구를 통해 그 값이 true로 설정됩니다.

불편을 끼쳐 드려 죄송합니다. 불행히도 번역사를 이용하십시오. 도와 주실 분을 아는 분들께 감사드립니다.

답변

0

@Applefriend 설명에 따르면 CustomSignIn 메서드의 코드는 요청이 완료 될 때 나중에 세션 정보를 설정할 발리를 사용하여 네트워크 호출을 비동기 적으로 호출합니다.

그래서 당신은 비동기 방식으로 당신은 왜 그것을 원하는가,

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; 
} 

는 사용자 로그인 기능이기 때문에

을 말할 때? 더 나은 방법은 다음과 같습니다. 불확정 진행 대화 상자를 표시하고 호출을 동 기적으로 수행하여 값을 반환하십시오.

이해가 잘못되면이를 바로 잡으십시오.

+0

나는 동기 요청을 사용하여 값을 반환하는 것과 같은 아이디어를 가졌습니다. 하지만 발리와 함께 FutureRequest를 사용했는데 결과적으로 TimeoutException이 발생했습니다. – Applefriend

+0

이것은 동기화 요청 [link] (http://s13.postimg.org/4n6573xw7/Schermata_2016_09_22_alle_21_24_00.png)을 구현하는 방법입니다. – Applefriend