Parse SDK 및 Bolts 프레임 워크를 사용하여 등록 흐름을 구현하려고합니다. Bolts-android 문서 사용하기 소셜 네트워크에서 개인 정보를 가져 와서이 데이터로 새 ParseUser를 만들고 작업을 반환하는 작업을 만들었습니다. onSuccessTask() 메서드를 사용하여이 작업을 체인화하고 다른 작업을 반환하는 signUpInBackground() 메서드를 사용하여 구문 분석에 새 사용자를 등록하려고합니다. 후자는 onSuccess() 메소드 호출로 묶었는데, 여기에서 가입이 성공적으로 완료되었는지 확인한 다음 사용자를 다른 화면으로 진행합니다. 새 사용자가 모든 것을 등록하려고 할 때 ok - 사용자가 성공적으로 가입합니다. 문제는 서버에 사용자가 이미 존재하는 경우입니다. Parse는 코드 202로 ParseException을 반환해야하며 가입하려고하는 두 번째 작업은 오류 상태가있는 새 작업을 생성해야한다고 생각하지만 끝나지 않은 것처럼 보입니다.ParseUser.signUpInBackground()는 오류가 발생했을 때 무엇을 반환합니까?
Task 1 ended
Task 2 ended
:
이private void loginUser() {
fetchUserTask()
.onSuccessTask(new Continuation<ParseUser, Task<Void>>() {
@Override
public Task<Void> then(Task<ParseUser> task) throws Exception {
if (task.isCompleted()) {
Log.d(EristicaConstants.LOG_TAG, "task1 ended");
return task.getResult().signUpInBackground();
} else {
Log.d(EristicaConstants.LOG_TAG, "some error happened " + task
.getError().getLocalizedMessage());
}
return null;
}
})
.onSuccess(new Continuation<Void, Void>() {
@Override
public Void then(Task<Void> task) throws Exception {
if (task.isCompleted()) {
Log.d(EristicaConstants.LOG_TAG, "task 2 ended");
mSuccessCallback.success();
} else {
Log.d(EristicaConstants.LOG_TAG, "some error happened 2" + task
.getError().getLocalizedMessage());
}
return null;
}
});
}
그래서 새로운 사용자의 경우 내가 로그이 순서를 참조하십시오이 내 로그인 방법은
private Task<ParseUser> fetchUserTask() {
final Task.TaskCompletionSource tcs = Task.create();
mNetwork.requestDetailedCurrentPerson(new OnRequestDetailedSocialPersonCompleteListener() {
@Override
public void onRequestDetailedSocialPersonSuccess(int socialNetworkID, SocialPerson socialPerson) {
ParseUser user = new ParseUser();
if (mNetworkId == VkSocialNetwork.ID) {
user.setUsername("vk" + socialPerson.id);
} else if (mNetworkId == FacebookSocialNetwork.ID) {
user.setUsername("fb" + socialPerson.id);
}
user.put("fullName", socialPerson.name);
user.put("photo", socialPerson.avatarURL);
tcs.setResult(user);
}
@Override
public void onError(int socialNetworkID, String requestID, String errorMessage, Object data) {
tcs.setError(new Exception(errorMessage));
}
});
return tcs.getTask();
}
입니다 :
이것은 내 첫 번째 작업이다 하지만 기존 사용자의 경우 첫 번째 줄만 표시되므로 onSuccess() 전화 한 적 없어요. 물론 ParseUser.signUpInBackground (SignUpCallback 콜백)를 사용하고 콜백에 따라 새로운 Task를 생성 할 수 있지만 좀 더 못된 솔루션입니다. 그래서 문제는 signUpInBackground가 오류를 반환하지 않는 이유입니다.
사용자가 로그인. 설명서에서'onSuccess'를'continueWith'로 대체해야한다는 것을 상기합니다. 나는 onSuccess가 단지 '트럭 운전을 계속하는'반면 continueWith는 이전 작업의 오류를 알고 있다고 생각합니다. 볼트 설명서 : https://github.com/BoltsFramework/Bolts-Android – cYrixmorten
감사합니다.이 경우 "작업 2 종료"로그가 표시되지만 ParseUser.getCurrentUser()가 null을 생성합니다. 따라서 signUpInBackground가 task.isCompleted() 예외를 생성하면 모두 동일한 것으로 평가됩니다. –
'continueWithTask'를 만들고'task.isFaulted()'를 확인하면 어떨까요? 볼트 설명서는 https://github.com/BoltsFramework/Bolts-Android#error-handling – cYrixmorten