How to Fix ‘android.os.NetworkOnMainThreadException’ in Your Android App

How to Fix 'android.os.NetworkOnMainThreadException' in Your Android App

22 May 2024 Stephan Petzl Leave a comment Tech-Help

Encountering the android.os.NetworkOnMainThreadException error can be frustrating. This exception occurs when an application attempts to perform a networking operation on its main thread. Android enforces this restriction to prevent apps from becoming unresponsive. Below, we’ll explore the most effective solutions to resolve this issue.

Understanding the Problem

When you perform network operations on the main thread, it can cause the UI to freeze, leading to a poor user experience. This is why Android requires that network operations be performed on a background thread.

Solution 1: Using AsyncTask (Deprecated in API Level 30)

One common approach is to use AsyncTask to run network operations in the background. Note that AsyncTask was deprecated in API level 30, but it is still relevant for older versions of Android. Here’s how you can implement it:

class RetrieveFeedTask extends AsyncTask {

    private Exception exception;

    protected RSSFeed doInBackground(String... urls) {
        try {
            URL url = new URL(urls[0]);
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            XMLReader xmlreader = parser.getXMLReader();
            RssHandler theRSSHandler = new RssHandler();
            InputSource is = new InputSource(url.openStream());

            return theRSSHandler.getFeed();
        } catch (Exception e) {
            this.exception = e;
            return null;

    protected void onPostExecute(RSSFeed feed) {
        // TODO: check this.exception
        // TODO: do something with the feed

To execute the task, add the following line in your file within the onCreate() method:

new RetrieveFeedTask().execute(urlToRssFeed);

Also, ensure you have the following permission in your AndroidManifest.xml file:

<uses-permission android:name="android.permission.INTERNET"/>

Solution 2: Using a New Thread

If you prefer not to use AsyncTask, you can run your network operations in a new thread:

Thread thread = new Thread(new Runnable() {
    public void run() {
        try {
            // Your code goes here
        } catch (Exception e) {


Another option is to override the default behavior using StrictMode. However, this approach is not recommended as it can lead to an unresponsive app. If you choose to use this method, do so with caution:

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

Best Practices and Recommendations

While the above solutions can help you resolve the NetworkOnMainThreadException, it is advisable to use more robust methods for network operations, such as IntentService or third-party libraries like Retrofit. These methods offer better performance and reliability.

Using IntentService

Implementing an IntentService allows you to handle asynchronous requests on demand and is less likely to cause memory leaks:

public class DownloadIntentService extends IntentService {
    public DownloadIntentService() {

    protected void onHandleIntent(Intent intent) {
        // Perform network operations here

Streamlining Mobile App Testing with Repeato

While handling network operations is crucial for app performance, ensuring your app is thoroughly tested is equally important. This is where Repeato can be a game-changer. Repeato is a no-code test automation tool for iOS and Android that helps you create, run, and maintain automated tests for your apps. Its fast editing and test execution capabilities, powered by computer vision and AI, can significantly reduce the time spent on manual testing.

Repeato allows mobile developers to focus on creating a great product by offloading the task of test automation to non-technical colleagues or QAs. To learn more about how Repeato can assist with your testing needs, check out our documentation or blog.

Like this article? there’s more where that came from!