2013-12-19 2 views
35

나는 Volley에 관한 글을 읽었으며 훌륭한 네트워킹 라이브러리라는 것을 알고있다. 그러나 나는 한 가지를 이해할 수 없었다.발리와 AsyncTask

모든 요청은 비동기 작업입니까, 아니요?

내가 발리를 사용하여 asyncTask 요청을 보내고 싶습니다. 발리 요청을 AsyncTask에 넣어야합니까? 또는 그냥 Volley Request를 호출해야합니까? 이미 AsyncTask 요청입니까?

private class MyClass extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      // do Volley request 
     } 
} 

이 올바른 접근 방식입니까?

+3

이미 백그라운드에서 '비동기 적으로 발생합니다.' ** 비동기 태스크 (AsyncTask)가 필요 없습니다. ** –

답변

52

비동기 작업에 대한 요청을 실행할 필요가 없습니다.

이유 :

그들은 별도의 스레드에있는 모든 네트워크 관련 작업을 관리 할 수 ​​있습니다. 라이브러리 프로젝트를 자세히 보면 비동기 작업을 알 수 없습니다. 그러나 그들은 지능적으로 모든 네트워크 관련 작업을 효율적으로 처리합니다.

확인 RequestQueue.java Volly의 기본 패키지 여기

내가 자바 문서를 붙여 넣기하고있는 클래스입니다.

/** 
* A request dispatch queue with a thread pool of dispatchers. 
* 
* Calling {@link #add(Request)} will enqueue the given Request for dispatch, 
* resolving from either cache or network on a worker thread, and then delivering 
* a parsed response on the main thread. 
*/ 

편집 : 요청 형성

: 발리슛

는, 네트워크 통신이 RequestQueue에 의해 관리된다. RequestQueue와 모든 도구, 특히 캐시를 활용하는 가장 좋은 방법은 한 번 인스턴스화하고이를 싱글 톤으로 유지하는 것입니다. 이 시점에서 요청을 추가 또는 취소하고, 요청을 중지 또는 시작하고, 응답 캐시에 액세스 할 수 있습니다.

RequestQueue queue =Volley.newRequestQueue(this); 

일단 RequestQueue가 인스턴스화되면 요청이 형성되어야합니다. 이는 발리 라이브러리에 포함 된 몇 가지 "기본 제공"요청 클래스를 활용하거나 발리의 요청 클래스를 사용자 정의 요청으로 확장하여 수행 할 수 있습니다. Volley에 이미 포함 된 요청 클래스는 String 요청, JSON 요청 및 이미지 요청입니다. Volley 라이브러리에 포함 된 대부분의 요청 클래스는 아래와 같은 생성자를 사용합니다.

매개 변수는 생성자에 전달되는 :

RequestMethod (,, 게시물을 얻을 삭제, 요법) * 된 JSONObject 귀하의 요청으로 게시됩니다 * -an 옵션 객체 ResponseListener - 요청이 완료된 후 데이터가 처리되는 곳 ErrorListener - 요청에 문제가있을 때 알려주는 내용.

성공적인 응답 리스너

private class ResponseListener implements Response.Listener{ 
    @Override 
    public void onResponse(JSONObject response){ 

    } 
} 

오류 응답 리스너

private class ErrorListener implements Response.ErrorListener{ 
    @Override 
    public void onErrorResponse(VolleyError error){ 

    } 
} 
:

Listners

JsonObjectRequest request = JsonObjectRequest(Requestmethod, url, null, new ResponseListener(), new ErrorListener()); 
는 응답을 수신하기3210

마지막으로 요청 큐에 요청을 추가하면 everithing volly의 나머지가 처리됩니다.

만들기 전화 : 이제

, 우리는 우리의 요청 및 응답 클래스를 만든 것을 우리가 데이터를 큐에 요청을 추가하고 검색 할 준비가되어 있습니다. 그렇게하기 위해서 우리는 단순히 요청을 큐에 추가합니다.

queue.add(request); 

응답 또는 오류는 요청에서 정의한 응답/오류 클래스로 전달됩니다. 한 번에 원하는 대기열에 많은 요청을 추가 할 수 있으며 응답은 해당 응답/오류 클래스에 전달됩니다.

+1

오랜 휴식 시간 (년) 후에 Android를 다시 방문하고 Android Studio, Google 공식 Android IDE를 설치했습니다. 이메일/비밀번호 로그인 템플릿을 사용하여 새 프로젝트를 설정하고 로그인 활동의 상용구 코드에 HTTP 요청을 제출해야하는 'AsyncTask'가 포함되었습니다. 이것은 혼란 스러웠고,이 질문에 나를 이끌었습니다. 나는 구글이이 경우에 Volley를 사용할 의도가 없다고 가정하고있다. – RTF

6

Volley를 사용할 때 AsyncTask과 결합 할 필요는 없습니다. 그것은 당신을 위해 다른 스레드에서 네트워킹 물건 않습니다.

Here은 Volley를 사용한 네트워크 호출의 기본 예제입니다. 보시다시피, AsyncTask을 정의 할 필요없이 모든 코드가 Activity에 있습니다.

발리 그래서 모든 네트워크 요청 자체에 백그라운드 스레드 (들)을 시작한다, 때문에 발리는 AsyncTask를 내부에 삽입 할 수 없습니다

+6

불행히도 귀하의 답변에있는 링크가 깨졌습니다. –

+0

등록 후 프로필 사진을 위해 이미지를 업로드하면 어떻게됩니까? 그가 사용하는 샘플 YouTube 튜토리얼이 있습니다. – RoCk

1

때문에 주로 더 이상 AsyncTask를 확장 할 필요가 없습니다 UI 스레드를 실행됩니다. 물론 회전하거나 실행중인 사용자가 퇴장 할 때 실행중인 요청을 취소해야합니다. Volley는 주로 안드로이드의 주요 네트워킹 용으로 사용됩니다 (주요 사용 DownloadManager 용). AsyncTask 클래스와 유사한 작업을 수행합니다. 발리에 싱글 톤을 구현하십시오. 발리에서도 이미지를 전송할 수 있습니다.