2016-10-06 2 views
0

프론트 엔드에서 Android로 작업 중이며 Spring의 REST 클라이언트 라이브러리를 사용하여 HTTP 요청을 REST 웹 서비스에 보냈습니다. 사람들이 AsyncTask을 사용하여 RestTemplatedoInBackground 방법 (AsyncTask)을 사용하는 예제를 온라인에서 읽었지 만 RestTemplate이 활동 또는 단편에서도 사용되는 경우를 예로 들었습니다. 다른 방법보다 한 가지 방법을 사용하는 것이 중요합니까?Spring REST 서비스에서 Android로 응답 수신

두 번째로 RestTemplate의 exchange 또는 getForAllObject을 통해 서버로부터 응답을 받으면받은 데이터를 기반으로 내 클라이언트가 다른 작업을 수행해야합니다. 예를 들어 사용자를 검색하려면 User 개체를 받아야하며 내 클라이언트는 사용자 조각/활동을 업데이트해야하지만 로그인하려면 다른 데이터를 받아야하고 클라이언트가 다른 후속 작업을 수행해야합니다.

HTTP 요청을 보내고 응답을받을 때마다 AsyncTask를 작성하면 클라이언트 측에서 수행해야하는 후속 작업을 어떻게 구별 할 수 있습니까? 열거 형을 사용하는 기본 방법은 무엇입니까? 예를 들어 서버에서 데이터를 가져 오려는 경우 AsyncTask를 인스턴스화하고 execute 매개 변수에 enum을 전달하여 전송할 HTTP 요청과 수신 된 데이터로 수행 할 작업을 지정하는 enum을 전달할 수 있습니다. 그렇다면 enum을 기반으로 다른 함수를 호출하는 switch 문을 사용할 수 있습니까?

이 중 어느 것도 의미가 없으면 서버에서 응답을 처리하는 데보다 일반적인 방법이 있습니까?

답변

0

docs에서 AsyncTask를이 UI 스레드의 적절하고 쉽게 사용할 수 있습니다. 이 클래스를 사용하면 스레드 및/또는 핸들러를 조작하지 않고도 UI 스레드에서 백그라운드 작업을 수행하고 결과를 게시 할 수 있습니다.

AsyncTask는 백그라운드에서 작업을 수행하고 기본 UI 스레드와 상호 작용하는 편리한 방법을 제공합니다. AsyncTasks를 사용하지 않았다면 UI를 업데이트하기 위해 주 스레드와 동기화 할 수있는 고유 한 메서드를 구현해야합니다. 백 엔드 서비스를 호출하거나 장기 실행 작업을 수행하는 경우 항상 비동기 작업을 수행하는 것이 좋습니다.

열거 형을 기반으로 다른 개체를 반환하는 데 동일한 REST 끝점을 사용하는 것은 좋지 않은 습관입니다. 2 개의 분리 된 종점을 갖는다. 사용자 검색을위한 하나의 GET 호출과 로그인 사용자에 대한 하나의 POST 호출. 클라이언트 측에서도 위의 끝점을 소비하는 경우 별도의 구현을해야합니다. 필요한 경우 적절하게 사용하십시오.

+0

나는 아직도 어떻게 작동하는지 잘 모르겠습니다. GET 요청과 POST 요청을 보내는 함수가있는 경우이 두 함수가 백그라운드에서 AsyncTask를 확장하여 요청을 보내고 응답을받는 클래스를 인스턴스화하지는 않습니까? 그렇다면'onPostExecution'을 호출하는 동안 AsyncTask가 초기 HTTP 요청이 POST인지 GET 요청인지를 모르는 상태에서 어디에서부터 AsyncTask가 어디로 가는지 어떻게 알 수 있습니까? 내가 보내고 자하는 모든 종류의 HTTP 요청에 대해 AsyncTask를 확장해야할까요? (하나는 로그인 용, 하나는 x 데이터 가져 오기, 다른 하나는 y 데이터 가져 오기) – Biiiiiird

+0

두 개의 분리 된 비동기 태스크 릿이 있어야합니다. 예제 UserSearchAsyncTask 및 UserLoginAsyncTask. 두 클래스 모두 AsyncTask를 확장합니다. 그런 다음 각 반은 필요한 곳에 있습니다. 일반적으로이 두 시나리오를 처리하기 위해 별도의 활동 또는 조각이 있습니다. –