2012-11-05 16 views
0

我想一個簡單的例子:http://www.vogella.com/articles/AndroidJSON/article.html的Android網址提取和樣品分析 - 錯誤

但得到一個錯誤..誰能告訴我,爲什麼我得到這個錯誤:http://puu.sh/1mGz1

+0

檢查Vogella的博客[** ** NetworkOnMainThreadException(http://www.vogella.com/blog/2012/02/22/android-strictmode-networkonmainthreadexception /)或在這裏檢查Stackoverflow本身:http://stackoverflow.com/search?q=Android+NetworkOnMainThreadException –

回答

1

使用AsyncTask從UI線程使得服務器請求,從而改變你的代碼:

///Your code... 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     new LongOperation().execute(""); 
     } 

    private class LongOperation extends AsyncTask<String, Void, String> { 

      @Override 
      protected String doInBackground(String... params) { 
       //call readtwitterFeed() method here 
       String readtwitterFeed=readtwitterFeed(); 

       return readtwitterFeed; 
      }  

      @Override 
      protected void onPostExecute(String result) {  
       try { 
        JSONArray jsonArray = new JSONArray(result); 
        Log.i(ParseJSON.class.getName(), 
         "Number of entries " + jsonArray.length()); 
        for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject jsonObject = jsonArray.getJSONObject(i); 
        Log.i(ParseJSON.class.getName(), jsonObject.getString("text")); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       }  
      } 

      @Override 
      protected void onPreExecute() { 
      } 

      @Override 
      protected void onProgressUpdate(Void... values) { 
      } 
    } 
0

您正在嘗試在主線程上發出數據請求。使用AsyncTask來做到這一點。
或者在onCreate()方法中添加這2行來繞過它。

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

我推薦使用asynctask。