Programiranje za Android - Predavanje 4


Preuzimanje projekta sa predavanja

##Sadržaj

Dohvat podataka s interneta

Networking on main thread

Dodatni materijali

##Dohvat podataka s interneta

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:

##Networking on main thread

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