จะแก้ไข android.os.NetworkOnMainThreadException ได้อย่างไร

Anonim

โดยใช้ AsyncTask (แนะนำ)

นำเข้า androidx.appcompat.app.AppCompatActivity; นำเข้า android.os.AsyncTask; นำเข้า android.os.Bundle; นำเข้า android.widget.TextView; นำเข้า java.io.BufferedReader; นำเข้า java.io.IOException; นำเข้า java.io.InputStreamReader; นำเข้า java.net.URL; MainActivity คลาสสาธารณะขยาย AppCompatActivity { TextView textLoad, textMessage; สตริงสุดท้าย strMessage = “https://sites.google.com/site/androidersite/text.txt”; @Override ป้องกันโมฆะ onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); textLoad = findViewById (R.id.textLoad); textMessage = findViewById (R.id.textMessage); textLoad.setText(“กำลังโหลด…”); ใหม่ MyTask().execute(); } MyTask คลาสส่วนตัวขยาย AsyncTask{ ผลลัพธ์สตริง; @Override ป้องกัน Void doInBackground (โมฆะ… โมฆะ) { URL url; ลอง { url = URL ใหม่ (strMessage); BufferedReader bufferedReader = ใหม่ BufferedReader (ใหม่ InputStreamReader (url.openStream ())); สตริงสตริงบัฟเฟอร์; สตริงสตริง = “”; ในขณะที่ ((stringBuffer = bufferedReader.readLine()) != null){ string = String.format(“%s%s”, สตริง, stringBuffer); } bufferedReader.close(); ผลลัพธ์ = สตริง; } จับ (IOException จ) { e.printStackTrace (); ผลลัพธ์ = e.toString(); } คืนค่า null; } @Override ป้องกันโมฆะ onPostExecute (เป็นโมฆะ aVoid) { textMessage.setText (ผลลัพธ์); textLoad.setText("เสร็จสิ้น"); super.onPostExecute(aVoid); } } }

ปิดใช้งานโหมดเข้มงวด (ไม่แนะนำ)

if (android.os.Build.VERSION.SDK_INT > 9) { นโยบาย StrictMode.ThreadPolicy = ใหม่ StrictMode.ThreadPolicy.Builder ().permitAll ().build (); StrictMode.setThreadPolicy(นโยบาย); }

จะแก้ไข android.os.NetworkOnMainThreadException ได้อย่างไร