-1

AVObject brandObj = query.getFirst(); 줄에 NetworkOnMainThreadException 오류가 발생합니다. 오류에 대한 검색을 한 후에 Asynctask와 같은 것을 사용해야합니다. 그러나 그것을하는 방법을 알아낼 수 없었다.Android Studio - NetworkOnMainThreadException이 객체 생성자

AVObjectParseObject

public class Product { 
    Product(AVObject object) { 
     try { 
      AVObject brandObj = query.getFirst(); // this one is making network request 
     } catch (AVException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

과 동일해야 하는가 I extends AsyncTask<AVObject, Void, AVObject>

다음

내가 doInBackground

모든 제안에 작성해야 무엇인지

@Override 
protected AVObject doInBackground(AVObject... objects) { 
    return null; 
} 

그러나하지?

+2

doInBackground에서 [android.os.NetworkOnMainThreadException을 어떻게 수정합니까?] (https://stackoverflow.com/questions/6343166/how-do-i-fix-android-os-networkonmainthreadexception) –

+0

가능한 복제본입니다. write query.getFirst(). 네트워크 요청을하는 방법입니다. –

+0

다른 작업에서 실행해야하는 코드를 넣으십시오. – MeknessiHamida

답변

1

NetworkOnMainThreadException은 응용 프로그램이 주 스레드에서 네트워킹 작업을 수행하려고 할 때 발생합니다. Honeycomb SDK 이상을 대상으로하는 응용 프로그램의 경우에만 이 발생합니다.

UI를 차단할 수 있으므로 주 스레드에서 네트워킹을 수행 할 수 없습니다. 따라서 모든 것을 별도의 스레드에서 수행해야합니다.

AsyncTask는 쉬운 솔루션 중 하나입니다. AsyncTask를 설정하고 (튜토리얼/가이드에 따라) 네트워크 코드를 별도의 스레드에서 실행되는 doInBackground() 메소드에 넣으십시오.

1

개체의 생성자는 디스크 I/O 또는 네트워크 I/O를 수행하지 않는 것이 가장 이상적입니다. 귀하의 경우에는 그렇습니다.

따라서 new Product(...)을 호출하는 모든 코드는 백그라운드 스레드 (일반 스레드, RxJava 체인 JobIntentService, AsyncTask 등)에 넣어야합니다. Product 자체는 변경되지 않습니다.

+0

안녕하세요. 내가 볼 수있는 모든 게시물? –