차례:
- 사용자를 대신해 트윗을 추가하려면 Twitter 객체 (factory. getInstance ()로 만든 인스턴스)를 잡고 인스턴스의 updateStatus 메소드. 이 네트워크 요청이 기본 활동의 흐름을 방해하는 것을 원하지 않으므로 요청을 AsyncTask에 넣습니다. 작업의 이름은 MyAsyncTaskTweet입니다. 작업의 세 가지 일반 유형은 다음과 같습니다. String, Void 및 String :
- List status = null; 상태 = 트위터. getUserTimeline (사용자 이름 [0]);
비디오: 될 때까지 안드로이드 #16 [19장 비동기 처리-1] 2024
AsyncTask는 Android 앱을 실행하는 데 시간이 너무 오래 걸릴 때 사용합니다. 예를 들어 사용자가 웹 페이지를 요청합니다. 페이지를 가져 오는 데 걸리는 시간을 누가 알 수 있습니까? 웹 페이지를 호스팅하는 서비스의 볼륨이 높을 수 있습니다. 또는 사용자가 터널을 통과하는 기차에있을 수 있습니다.
모든 종류의 것들이 페이지 검색 속도를 늦출 수 있습니다. 이 검색 중에 사용자는 버튼을 클릭하거나 문서를 스크롤하거나 앱에서 응답해야하는 다른 작업을 수행하려고 할 수 있습니다.
앱이 웹 페이지를 기다리거나, 트위터 타임 라인을 가져 오거나, 사용자의 트위터 상태를 업데이트하는 동안 프로그램을 중단 할 수 없습니다. 이것이 AsyncTask 내부에서 네트워크 요청을 코딩하는 이유입니다.
Android의 AsyncTask는 모든 유형의 값을 다룰 수있는 다기능입니다. 사실, 문서는 AsyncTask를 다음과 같이 정의합니다:
android. OS. AsyncTask
정의에는 Params, Progress 및 Result의 세 가지 일반 유형 자리 표시자가 있습니다. 자신 만의 AsyncTask를 만들 때 Params, Progress 및 Result 대신 실제 유형을 지정하여 "빈 칸을 채 웁니다".
사용자를 대신해 트윗을 추가하려면 Twitter 객체 (factory. getInstance ()로 만든 인스턴스)를 잡고 인스턴스의 updateStatus 메소드. 이 네트워크 요청이 기본 활동의 흐름을 방해하는 것을 원하지 않으므로 요청을 AsyncTask에 넣습니다. 작업의 이름은 MyAsyncTaskTweet입니다. 작업의 세 가지 일반 유형은 다음과 같습니다. String, Void 및 String:
,
String { 첫 번째 유형 (String)은 다음을 나타냅니다. 140 자짜리 짹짹. 코드 execute (editTextTweet. getText (). toString ()) 는 활동 텍스트 필드 중 하나에서 문자열을 가져 와서 해당 문자열을 MyAsyncTaskTweet에 전달합니다. MyAsyncTaskTweet 내에서 doInBackground 메서드는 문자열 tweet [0]을 호출하고 해당 tweet [0] 문자열을 사용하여 사용자의 상태를 업데이트합니다. updateStatus 메소드의 매개 변수는 배열 요소입니다. 왜냐하면 doInBackground 메서드의 헤더에서 tweet는 varargs 매개 변수이기 때문입니다. varargs라는 단어는 "가변 개수의 인수를 의미합니다. "원하는만큼 많은 값을 doInBackground에 전달할 수 있습니다. 이 메서드의 본문에서는 트윗을 일반 배열처럼 처리합니다. 첫 번째 짹짹 값은 트윗 [0]입니다. 두 번째 짹짹 값이 있다면 짹짹 [1], 등등.
-
두 번째 유형 (Void)은 작업 완료시 백그라운드 스레드의 진행 상태를 나타내는 값 (들)을 나타냅니다.
진행 표시기가 없으므로 두 번째 유형 이름은 Void입니다.
Java에서 Void 클래스는 void 값을위한 래퍼 클래스이다. 그것을 무의미한 블랙홀에 넣으십시오!
세 번째 유형 (String)은
Success와 같은 구문을 나타냅니다!
-
또는
짹짹
에 실패했습니다.
-
doInBackground 메소드는 R. 문자열과 연관된 문자열을 찾습니다. 성공, R. string. twitter_failure 또는 R. string. general_failure를 호출하고이 문자열을 결과로 반환합니다. 그런 다음 onPostExecute 메서드는이 문자열을 화면의 editTextTweet 필드에 표시합니다. 이 이미지는 제네릭 형식 이름이 메서드의 형식에 영향을주는 방식을 요약합니다. MyAsyncTaskTweet에서 유형 사용. 아래 이미지는 MyAsyncTaskTweet에서 값이 한 위치에서 다른 위치로 이동하는 방법을 요약 한 것입니다. MyAsyncTaskTweet의 값 흐름입니다.
사용자의 타임 라인 가져 오기
하나의 AsyncTask를 본 적이 있다면, 그들 모두를 보았을 것입니다! MyAsyncTaskTimeline 클래스는 MyAsyncTaskTweet과 거의 동일합니다. 유일한 차이점은 다음과 같습니다.
MyAsyncTaskTweet에서 doInBackground에 전달 된 매개 변수는 트윗으로 처리됩니다. 그러나 MyAsyncTaskTimeline에서 doInBackground에 전달 된 매개 변수는 사용자 이름입니다. 코드는이 사용자 이름을 getUserTimeline 메소드에 전달합니다.MyAsyncTaskTweet에서 doInBackground에서 반환 된 값은 성공 또는 실패 메시지입니다. 그러나 MyAsyncTaskTimeline에서 doInBackground에서 반환 된 값은 트윗 (타임 라인)으로 가득 찬 문자열입니다.
사용자의 타임 라인을 가져 오는 코드는 다음과 같습니다.List status = null; 상태 = 트위터. getUserTimeline (사용자 이름 [0]);
야마모토 유스케 (Yusuke Yamamoto)라는 사람이 트위터 4J (또는 적어도 Yusuke Yamamoto가 Twitter4J 프로젝트 리더 였음)를 개발했으며, 어느 시점에서 야마모토 (Yamamoto)는 getUserTimeline 메소드가 twitter4J 콜렉션을 반환한다고 결정했습니다. 상태 개체. (각 twitter4J. status 인스턴스에는 하나의 트윗이 포함됩니다.) 따라서 getUserTimeline 메소드를 호출하여 설정된 계약을 존중하기 위해 코드는 상태를 twitter4J 콜렉션으로 선언합니다. 상태 개체.
-
코드의 몇 줄 뒤에 확장 된 for 문이 상태 값 수집을 단계별로 실행하고 각 값의 텍스트를 큰 결과 문자열에 추가합니다. 루프는 좋은 평가를 위해 각 트위터 뒤에 "n"(자바의 다음 줄 문자)을 추가합니다. onPostExecute 메서드에서 코드는 화면의 textViewTimeline 필드에 큰 결과 문자열을 표시합니다.
-
두 번째 doInBackground 메소드에서 완전한 이름 인 twitter4j. 상태가 사용됩니다. 이것은 twitter4J를 구분하기 위해 수행됩니다. 안드로이드 자신의 AsyncTask로부터의 상태 클래스. 상태 클래스 (AsyncTask 클래스의 내부 클래스).
AsyncTask는 상당히 복잡 할 수 있습니다. 그러나 Android의 AsyncTask를 DIY 스레딩 대안과 비교할 때 AsyncTask 아이디어가 전혀 나쁘지 않습니다. 사실 약간의 연습을하고 자신 만의 AsyncTask 클래스를 만들면 그렇게 생각하는 데 익숙해집니다. 전체 사업이 매우 자연 스럽다고 느끼기 시작합니다.