2013-05-03 4 views
1

나는 안드로이드 애플리케이션의 백엔드 서비스로 parse.com을 사용하고 있습니다. 내 활동과 구문 분석을 분리하고 싶습니다.이 목적을 위해 서비스 클래스 마법사가 활동을 연결하고 파싱합니다 (백엔드). 대부분의 구문 분석 함수는 비동기식이므로 실제로 처리하는 방법을 모르겠습니다. 예를 들어 사용자와 로그인하려면 구문 분석 로그인 함수로 로그인을 실행해야하는 서비스 객체를 호출합니다. 그래서 여기 활동에 내 코드입니다 :비동기 함수 호출

LoginService login = new LoginService("username", "password"); 
login.login(); 
//from here it is not correct 
if(login.getLoginStatus() == 2) { 
    //user loggedin 
}... 

는 내 서비스 코드는 다음과 같습니다

public LoginSrvice(String userName, String pass) 
    { 
     this.userName = userName; 
     this.pass = pass; 
    } 

    public void loginUser() 
    { 
     ParseUser.logInInBackground(userName, pass, new LogInCallback() 
     { 

      @Override 
      public void done(ParseUser user, ParseException e) { 
       if (user != null) { 
         logedIn = 1; 
       } else { 
         logedIn = 2; 
       } 
      } 
     }); 
    } 

    public int getLoginStatus() 
    { 
     return logedIn; 
    } 

내 질문은 내가 바로 그것을 할 방법입니까? 어떻게하면 활동과 서비스를 분리하여 둘 수 있지만 서비스 클래스가 구문 분석으로부터 콜백을 얻을 때까지 활동의 응답을 기다린다. 사전에 도움을 주셔서 감사합니다!

답변

1

글쎄, 나는 안드로이드 개발자가 아니지만, 자바에서는 wait() notifiy() 메소드를 사용하여 어떤 일이 일어날 때까지 기다릴 수있다. 그러나 notify()가 이미 호출 된 후 대기() 할 수있는 경쟁 조건에서 입력 할 수 있습니다.

+0

예를 들어주세요. – vlio20

+1

이 항목 : http://stackoverflow.com/questions/7713786/java-make-a-method-wait-for-a-response-of-another-process/7713815#7713815 샘플을 찾을 수 있습니다. 내가 말했듯이, 자바의 일반적인 프로 시저입니다. –

1

서비스의 수명주기가 사용자 작업에 연결되어 있지 않은 경우 bind to it을 입력 한 다음 get a reference to the Service via the Binder object을 입력 할 수 있습니다. 가장 간단한 통신 방법은 this project과 비슷한 방식으로 Messenger 개체를 사용하는 것입니다.

이 특별한 경우에는 사용자가 로그인 화면 이외의 다른 것을 사용할 수 있기 전에 로그인을 기다리고 있다고 가정합니다. AsyncTask 또는 더 나아가 Fragment/Loader 모델에서 로그인을 수행 할 수 있습니다. 적절한 콜백 메소드에서 로그인 후 조치를 수행합니다.

+0

내 서비스 클래스는 안드로이드 서비스 클래스가 아니며, 액티비티와 구문 분석 메서드 사이의 버퍼 일뿐입니다. 그물에 대한 해결책을 찾지 못했습니다. AsyncTask는 나중에 하나 이상의 작업을 내 서비스에서 호출하는 데 필요할 수있는 한 가지 작업, 즉 모든 CRUD 억압에 유용합니다. 어떤 해결책이 있다면 나는 감사 할 것이다! – vlio20

1

나는 Parse와 iOS에 대해 매우 비슷한 질문을했다. 내가 발견 한 대답과 함께 here이라는 질문을 게시했습니다. Parse for JavaScript에서 Cloud Code를 작성하는 경우가 있습니다. 이를 위해서는 약속을 사용하는 법을 배워야합니다. iOS의 비동기 관리에 대한 내 솔루션은 iOS에서 Promise를 구현하는 것이 었습니다. 그들은 매우 깨끗한 방법으로 내 배경 구문 분석 작업을 캡슐화 할 수있었습니다. 같은 트릭이 당신을 위해 작동 할 수 있습니다.

제가 GitHub에 게시 한 코드는 도움이 될 수 있지만 Objective-C에있을 수 있습니다. 당신이 구문 분석의 API 주변의 추상화를해야하는 이유 - 밥

1

나는 분명 아니지만, 나는 매우 간단한 무언가를 추천 할 것입니다. Parse의 API는 이미 스레드 안전을 처리하므로 구문 분석 상태와 KISS에 대한 인터페이스를 작성할 수 있습니다. 나는.

class UserAbstraction { 
    // You may find it useful to also use the callback object for other reasons. 
    public static void logIn(string userName, string password) { 
    ParseUser.logInInBackground(userName, password); 
    } 

    public static boolean isLoggedIn() { 
    return ParseUser.getCurrentUser() == null; 
    } 
} 
+0

백엔드 호출과 액티비티를 구분해야합니다. 내일 백엔드 공급자를 변경할 것입니다. – vlio20