1

我明白,GUI線程上不允許網絡操作。對我來說還可以。但是爲什麼在對話框按鈕上使用這個代碼點擊回調仍然會產生NetworkOnMainThreadException避免NetworkOnMainThreadException

new Thread(new Runnable() {       
    @Override 
    public void run() { 
    heavyAndTimeConsumingOperation(); 
    } 
}).run(); 

也許我不會產生一個新的線程這種方式?

+1

看看我的** [博客文章'NetworkOnMainThreadException'](http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html)**更多信息。 –

回答

9

您需要撥打.start()而不是.run()

.run()是您重寫的方法實際執行。
.start()是實際啓動線程的系統提供的方法。

+3

嗯......我可以用一個新的關於時空矩陣的方法來改變這個愚蠢的問題嗎? – lorenzoff

4

SLaks是正確的,但對於Android有一個更加微妙的方式:AsyncTask

new AsyncTask<Void, Void, Void>(){ 

    @Override 
    protected Void doInBackground(Void... params){ 
     //Do heavy stuff 
    } 

    @Override 
    protected void onPostExecute(Void result){ 
     //Do UI stuff after heavy stuff 
    } 
}.execute();