我有這個代碼與ListView和JSON響應,但它會引發錯誤「NetworkOnMainException」,我認爲這個錯誤是爲什麼我沒有AsynTask執行它,真的嗎?但我不知道我該如何表達。感謝如何插入此代碼到AsynTask
代碼:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lvCities = (ListView) findViewById(R.id.lv_cities);
ArrayList<City> citiesAvaiable = new ArrayList<City>();
try {
// Llamamos al servicio web para recuperar los datos
HttpGet httpGet = new HttpGet("http://comupunt.esy.es/cities.php");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse)httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
BufferedHttpEntity buffer = new BufferedHttpEntity(entity);
InputStream iStream = buffer.getContent();
String aux = "";
BufferedReader r = new BufferedReader(new InputStreamReader(iStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
aux += line;
}
// Parseamos la respuesta obtenida del servidor a un objeto JSON
JSONObject jsonObject = new JSONObject(aux);
JSONArray cities = jsonObject.getJSONArray("cities");
// Recorremos el array con los elementos cities
for(int i = 0; i < cities.length(); i++) {
JSONObject city = cities.getJSONObject(i);
// Creamos el objeto City
City c = new City(city.getInt("name"), city.getString("nametwo"));
c.setData(city.getString("photo"));
// Almacenamos el objeto en el array que hemos creado anteriormente
citiesAvaiable.add(c);
}
}
catch(Exception e) {
e.printStackTrace();
}
// Creamos el objeto CityAdapter y lo asignamos al ListView
CityAdapter cityAdapter = new CityAdapter(this, citiesAvaiable);
lvCities.setAdapter(cityAdapter);
}
}
這是錯誤的,因爲你正在主線程上運行它。您可以使用AsyncTask,但也可以使用其他線程而不使用Async。 – 2014-12-04 08:46:42