2014-03-14 54 views
33

我創建Android應用程序,並使用JSON從服務器獲取數據,但我得到了下面的錯誤顯示:

android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 

我怎麼能解決這個問題
謝謝

+1

見我回答下面的問題,希望能工作! –

+2

此例外的原因; http://stackoverflow.com/a/6986726/1528483 – Jorge

回答

96

你必須插入2行 「StrictMode」 在MainActivity類別,例如是下面:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

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

     try { 
      // JSON here 
     } catch (JSONException e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 
     catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     setContentView(R.layout.activity_main); 
     Intent intent=new Intent(this,HomeActivity.class); 
     startActivity(intent); 
    } 
} 

Aey.Sakon

+0

謝謝,你救了一天:) –

33

更好使用AsyncTask作爲提及here,替代剛剛擺脫Exception是使用:

if (android.os.Build.VERSION.SDK_INT > 9) { 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
} 

或本:

Thread thread = new Thread(new Runnable(){ 
@Override 
public void run() { 
    try { 
     //Your code goes here 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage()); 
    } 
} 
}); 
thread.start(); 
在您的活動,其中 Exception發生

+3

我會說這是一個更好的答案,接受,因爲它提供的替代方案。正如這裏解釋http://stackoverflow.com/a/6986726/1528483你應該將你的網絡操作移動到一個線程 – Jorge

+0

工作很好,thx這麼多兄弟! – vinidog

+0

@vinidog林間空地從你這裏__快樂編程___ –

6

只需添加兩行後創建方法

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
相關問題