我有这个代码与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