2012-04-02 3 views
1

android 프로젝트에서 stackmob API를 사용하고 있으며 성공적 완료시 콜백이 호출되지 않은 것으로 보입니다. 제대로 작동하는 데 필요한 기능은 로그인 기능입니다. 나는 온 클릭 핸들러에서 호출되어 다음과 같은 기능을 가지고 : 함수가 호출 될 때성공시 Stackmob 로그인 콜백이 실행되지 않음

private void logIn() 
    { 
     Map params = new HashMap(); 
     EditText e = (EditText) findViewById(R.id.userNameEditText); 
     params.put("username", e.getText().toString()); 
     e = (EditText) findViewById(R.id.passwordEditText); 
     params.put("password", e.getText().toString()); 
     m_stackmob.login(params, new StackMobCallback() 
     { 
      @Override 
      public void success(String response)//<--never called 
      { 
       Log.d(TAG, response);//<--Never see this in the log 
       setLoggedIn();//<--UploadActivity member function never fires 
      } 

      @Override 
      public void failure(StackMobException e) 
      { 
       Log.d(TAG, e.getMessage()); 
       Toast.makeText(TimeTrackerUploadActivity.this, 
           e.getMessage(), 
           Toast.LENGTH_LONG).show();   
      } 
    }); 
} 

, 내가 stackmob에 로그인하고있어 및 데이터를 게시 할 수 있지만, 콜백 성공 함수가 호출되지 않습니다. 누구나 이것이 왜 또는 어떻게 고칠 수 있는지 알고 있습니까? 내가 뭔가 잘못하고 있는거야? 액티비티에서 상태를 설정하기 위해 로그인이 성공했는지 알아야합니다. 고맙습니다.

이 답변을 찾지 못했지만 해결 방법을 찾았습니다. 콜백 작업만큼이나 깨끗하지는 않지만 일을 끝내게됩니다. 여기있어.

private void logIn() 
    { 
     Map params = new HashMap(); 
     EditText e = (EditText) findViewById(R.id.userNameEditText); 
     params.put("username", e.getText().toString()); 
     e = (EditText) findViewById(R.id.passwordEditText); 
     params.put("password", e.getText().toString()); 
     StackMobRequestSendResult result = m_stackmob.login(params, new StackMobCallback() 
     { 
      @Override 
      public void success(String response) 
      {} 

      @Override 
      public void failure(StackMobException e) 
      { 
       Log.d(TAG, e.getMessage()); 
       Toast.makeText(TimeTrackerUploadActivity.this, 
           e.getMessage(), 
           Toast.LENGTH_LONG).show(); 
      } 
     }); 

     RequestSendStatus status = result.getStatus(); 
     if(status.compareTo(RequestSendStatus.SENT) == 0) 
     { 
      Log.d(TAG, "Login success detected!!!"); 
      setLoggedIn(); 
     } 
     else 
     { 
      //failure callback works and can handle this 
     } 
    } 

감사합니다, 조셉

귀하의 해결 방법은 정말 작동하지
+0

@ 테일러 저에게 새로운 태그를 추가해 주셔서 감사합니다. – jdwieber

+0

위의 질문에 대한 문제 해결을 위해 추가되었습니다. 나는 여전히 콜백을 잘못 사용하고 있는지 또는 너무 많이 기대하는지 알고 싶어합니다. – jdwieber

답변

2

. StackMobSendResult는 요청이 성공적으로 처리 된 것이 아니라 전송되었음을 알려줍니다. 당신이 정말로 원하는 것은 콜백 함수입니다.

원본 코드가 올바르게 보이고 동일한 코드가 올바르게 작동합니다. 최근 최신 SDK (0.4.2)를 사용해 볼 수 있습니까? https://github.com/downloads/stackmob/StackMob_Android/stackmob-android-v0.4.2.zip 작동하지 않는 경우 StackMobCommon.LOGGING_ENABLED = true를 추가하여 디버그 로깅을 활성화 할 수 있습니다. StackMobCommon.init을 호출하기 전에 오른쪽에있는 onCreate에 을 입력하십시오. 그렇게하면 Logcat에 StackMob이라는 태그가 붙은 메시지가 표시됩니다. 여기에 게시 할 수 있습니까? 감사합니다

+0

stackmob 웹 사이트에서 0.4.2를 다운로드했습니다. 나는 github에서 그것을 꺼내 당신이 말한대로 할거야. 결과를 게시 할게. 또한, 반환 값에 대한 정보를 주셔서 감사합니다. – jdwieber

+0

좋아, 내가 틀렸어. 나는 sdk 0.4.1을 가졌다. 위 링크 (0.4.2)에서 버전을 사용할 때 로그인 콜백이 작동합니다. 더글라스 감사합니다. – jdwieber