Programiranje za Android - Predavanje 4
23 May 2014
##Sadržaj
U predavanju o ListView smo naučili kako napuniti listu s podacima. Pošto su obično ti podaci s interneta, ovdje ćemo pokazati kako dohvatiti podatke s interneta, te ih spremiti u polje i predati adapteru, da bi ListView mogao koristiti te podatke.
Primjer dijela koda koji radi zahtjev za resursom:
ArrayList<Item> items = new ArrayList<Item>();
HttpGet get = new HttpGet("https://raw.githubusercontent.com/jcavar/jcavar.github.io/master/res/api.json");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(get);
HttpEntity entity = response.getEntity();
JSONArray array = new JSONArray(EntityUtils.toString(entity));
for (int i = 0; i < array.length(); i++ ) {
JSONObject object = (JSONObject) array.get(i);
Item item = new Item();
item.answer = object.getString("answer");
item.question = object.getString("question");
items.add(item);
} <br> Da bi mogli koristiti internet u aplikaciji potrebno je u AndroidManifest.xml datoteci to i definirati:
Ako ovaj dio koda pokušamo izvesti dobit ćemo
android.os.NetworkOnMainThreadException <br> To znači da se operacije koje dohvaćaju ili šalju nešto preko mreže ne smiju izvoditi na glavnoj dretvi. Pojednostavljeno: te operacije se moraju izvoditi u pozadini. Da bi to izbjegli kopirat ćemo sljedeće dvije linije koda. One nas oslobađaju tog ograničenja.
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); <br> Ovo je loš način za riješiti ovaj problem i to nikako ne bi trebalo raditi. Pravi način bi bio koristiti AsyncTask, o čemu možete pogledati u dodatnim materijalima ##Dodatni materijali<a name="dodatno"></a>
AsyncTask - Android dokumentacija o AsyncTask klasi
JSON - Wikipedia JSON