programing

네트워크에서 오류 StrictMode$AndroidBlockGuardPolicy.onNetwork

goodjava 2023. 4. 5. 21:48

네트워크에서 오류 StrictMode$AndroidBlockGuardPolicy.onNetwork

안드로이드 앱과 사용법을 만들었습니다.JSON서버로부터 데이터를 취득하고 있습니다만, 다음의 에러 메세지가 표시됩니다.

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)

어떻게 하면 이 문제를 해결할 수 있을까요?
감사해요.

MainActivity 클래스에 "StrictMode"를 두 줄 삽입해야 합니다. 예를 들어 다음과 같습니다.

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        
        try {
            // JSON here
        } catch (JSONException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        setContentView(R.layout.activity_main);
        Intent intent=new Intent(this,HomeActivity.class);
        startActivity(intent);
    }
}

에이.사콘

편집: 이 답변은 "문제 해결"은 되지만 실제로 설명하지는 않습니다.이것은 중요한 부분입니다.

Strict Mode 변경은 수정 사항이 아닙니다.또한 이 예외는 프로그램 로직의 오류가 아닙니다.프로그램 패러다임의 오류와 예외는 다음과 같습니다.

메인 스레드에서 http 콜을 실행하면 UI가 동결되므로 실행하지 마십시오.다른 응답에서도 알 수 있듯이 HTTP 콜을 AsyncTask 클래스에 핸드오프해야 합니다.

https://developer.android.com/reference/android/os/AsyncTask

Strict Mode를 변경하는 것은 앱에 전달될 뿐입니다.나쁜 코드를 쓰는 것을 상기시키지 마세요.이것은 디버깅에 사용할 수도 있고, 자신이 무엇을 하고 있는지 알고 있는 경우에 사용할 수도 있지만, 일반적으로 이 방법은 적합하지 않습니다.

사용하기 쉽다AsyncTask여기서 언급했듯이, 단지 이 문제를 없애기 위한 대안입니다.Exception사용방법:

if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 
}

또는 다음과 같습니다.

Thread thread = new Thread(new Runnable(){
@Override
public void run() {
    try {
        //Your code goes here
    } catch (Exception e) {
       Log.e(TAG, e.getMessage());
    }
}
});
thread.start();

액티비티에서Exception일어나다.

작성 방법 뒤에 두 줄만 추가합니다.

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

언급URL : https://stackoverflow.com/questions/22395417/error-strictmodeandroidblockguardpolicy-onnetwork