Вам нужно вызвать penaltyLog()
на вашем StrictMode.ThreadPolicy.Builder, чтобы он показал вам причину, а также остановку вашего приложения.
Вот что вы, вероятно, имеете в настоящее время:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyDeath()
.build());
Если вы вызываете сеть в главном потоке, вы получите это исключение, которое трудно понять:
E/AndroidRuntime(8752): android.os.StrictMode$StrictModeViolation: policy=71 violation=4
E/AndroidRuntime(8752): at android.os.StrictMode.executeDeathPenalty(StrictMode.java:1311)
Если вы добавите penaltyLog()
к вашей политике ...
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.penaltyDeath()
.build());
тогда вы увидите гораздо более полезное сообщение, подобное приведенному ниже. Это будет в выводе LogCat.
D/StrictMode(8810): StrictMode policy violation; ~duration=2956 ms: android.os.StrictMode$StrictModeNetworkViolation: policy=87 violation=4
D/StrictMode(8810): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1090)
Если вы посмотрите внимательно, вы увидите, что эта трассировка стека приведет вас к коду, вызывающему нарушение StrictMode.