0

我需要在url onLocationChanges方法上發送數據,m試圖用下面的代碼完成任務,但是出現錯誤,有人可以幫我解決嗎? 我用下面的代碼需要在url上發送數據onLocationChanged方法

@Override 
    public void onLocationChanged(Location location) throws NetworkOnMainThreadException { 
    txtLat = (TextView) findViewById(R.id.address_textview); 
    txtLat.setText("Latitude:" + location.getLatitude() + ",   Longitude:"   +   location.getLongitude()); 

String strUrl="http://www.test.com/location.php?location="+location.getLatitude(); 
try { 
    url = new URL(strUrl); 
} catch (MalformedURLException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 
try { 
    urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.connect(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
    } 
+0

['NetworkOnMainThreadException'?](http://stackoverflow.com/search?q=NetworkOnMainThreadException) –

+0

問題編輯 – amrit

+0

我寫下面的代碼會建議點擊以前的評論。聲明你的方法拋出'NetworkOnMainThreadException'會幫助你絕對zilch。關於這個具體例外的大量問題的答案應該綽綽有餘。 –

回答

0

程序崩潰你不能做網絡I/O的onLocationChanged()。您需要在onLocationChanged()開始背景Thread。後臺Thread可以執行網絡I/O。

0

您可以在MainActivity.java類的onCreate()

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

這不是一個好主意。網絡I/O可能需要很長時間(套接字超時和DNS超時時間長達數分鐘)。在這種情況下,您可以阻止主(UI)線程太長時間。在主線程上執行網絡I/O永遠不是一個好主意。 OP應該在後臺線程上執行網絡I/O。 –