찾다

 >  Q&A  >  본문

android - AsyncTask进行http请求,请求到XML数据后在onPostExecute解析,为何报在主线程中执行网络请求错误。

然而将解析操作写在doInBackground方法中不会报错。

怪我咯怪我咯2772일 전519

모든 응답(3)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 17:38:35

    그렇습니다. 원본 포스터의 결과(InputStream)는 원격 리소스를 가리키는 InputStream입니다. 이때 InputStream에서 데이터를 읽는 것은 원격 리소스를 읽는 것과 동일하므로 오류가 보고됩니다. 근본적인 이유는 Android의 "네트워크 요청은 메인 스레드에서 실행될 수 없습니다"라는 제한이 연결((HttpURLConnection)url.openConnection())에만 국한되지 않고 전체 데이터 프로세스에 대한 제한이기 때문입니다.

    따라서 권장되는 접근 방식은 전체 InputStream 구문 분석을 doInBackground에 배치한 다음 doInBackground의 비즈니스 로직을 준수하는 엔터티 클래스를 반환하는 것입니다.

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 17:38:35

    파싱은 시간이 많이 걸리는 작업이므로 하위 스레드에 배치해야 합니다. onPostExecute는 메인 스레드이고 doInBackground은 하위 스레드입니다.

    메인 스레드에서 시간이 많이 걸리는 작업을 수행했기 때문에 오류를 보고하는 것이 정상입니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:38:35

    InputStream을 획득한 데이터 문자열로 바꿔야 합니다

    그런 다음 onPostExecute()에서

    을 구문 분석합니다.

    회신하다
    0
  • 취소회신하다