Просто, чтобы объяснить что-то явно:
Основной поток - это в основном поток пользовательского интерфейса.
То, что вы не можете выполнять сетевые операции в основном потоке, означает, что вы не можете выполнять сетевые операции впоток пользовательского интерфейса, что означает , что вы не можете выполнять сетевые операции в *runOnUiThread(new Runnable() { ... }*
блоке внутри какого-либо другого потока, либо.
(у меня просто был долгий головокружительный момент, пытаясь выяснить,почему я получаю эту ошибку где-то, кроме моего основного потока. Именно поэтому этот поток помог, и, надеюсь, этот комментарий поможет кому-то еще.)