50 likes | 146 Views
HTTP kommunikáció Androidon. HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása. HttpPost. HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(SERVER_ADDRESS); try {
E N D
HTTP kommunikáció Androidon • HttpClient-en keresztűl • HttpPost/HttpGet objektum használatával • HttpClient execute metódusának meghívása
HttpPost HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(SERVER_ADDRESS); try { List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("text", texts[0])); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse response = httpClient.execute(httpPost); } catch (Exception e) { e.printStackTrace(); } Ez így már működik, de van vele egy kis gond...
UI Thread blokkolása • Nem szerencsés • User-t zavarja • Rendszer kilőheti az appot (ANR) • Hálózati kommunikáció nem megengedett • Többféle megoldás • Runnable – runOnUIThread • AsyncTask
AsyncTask • Automatikusan kezeli a szálváltást • Saját osztályt kell belőle származtatni • Meg van a saját életciklusa • doInBackground • Háttérben fut • OnPostExecute • UI Thread-en fut
AsyncTask példa private class SendTask extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... texts) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(SERVER_ADDRESS); try { List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("text", texts[0])); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse response = httpClient.execute(httpPost); } catch (Exception e) { e.printStackTrace(); } return null; } } Futtatás: new SendTask().execute(new String[] { param });