Análisis y diseño de software dit UPM ejercicios 7-8 José A. Mañas 7.5.2016 temas • aplicación android – recoge una serie de palabras clave del usuario – descarga un rss feed (resúmenes de noticias) – filtra las noticias que incluyen las palabras – presenta las noticias filtradas – permite navegar al periódico • http://www.dit.upm.es/~pepe/doc/adsw/ejercicio7/ej7.apk ADSW 2 activities • MainActivity ADSW • RssListActivity 3 arquitectura AsynchTask task task.execute() task MainActivity RssFeedDownloader startActivity() RssFeedParser FilteredRssFeed List<RssItem> ADSW RssListActivity getEntries() startActivity() browser 4 main activity layout <...Layout // contenedor <EditText // palabras filtro de noticias <Spinner // servidor de noticias <Button // va al servidor a descargar noticias <ProgressBar // mientras se están descargando </...Layout> ADSW 5 MainActivity • Cuando se hace clic en el botón lanza una asynctask private class RssRetrieveTask extends AsyncTask<String, Void, Void> { @Override protected void onPreExecute() { } // strings[0] site url // strings[1] palabras filtro protected Void doInBackground(String... strings) { } @Override protected void onPostExecute(Void v) { } ADSW 6 AsyncTask • void onPreExecute() – se inicializa la barra de progreso • Void doInBackground(String ... s) – recibe una url en s[0] • la usa para descargar los ítems con RssFeedDownloader – recibe una serie de palabras filtro en s[1] • las usa para resetear FilteredRssFeed • mete en FilteredRssFeed los ítems descargados con RssFeedDownloader • void onPostExecute(Void v) – termina la barra de progreso – lanza RssListActivity ADSW 7 RssListActivity • layout – usa una ListView para presentar todos los ítems • usa un ArrayAdapter – para adaptar la lista de FilteredRssFeed a ña ListView – usa un layout para presentar cada ítem por ejemplo: <LinearLayout <TextView android:id="@+id/rssItemTitle“ <TextView android:id="@+id/rssItemDate" <TextView android:id="@+id/rssItemDescription" </LinearLayout> ADSW 8 RssListActivity • Cuando se hace clic en una noticia, se salta al navegador private class OnItemClickListenerListViewItem implements android.widget.AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { RssItem item = ... Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(item.link)); startActivity(browserIntent); } } ADSW 9 clases java & recursos • parte del enunciado – – – – class RssItem class FilteredRssFeed class RssFeedDownloader class RssFeedParser • a desarrollar como ejercicio – class MainActivity – class RssListActivity – class RssArrayAdapter ADSW & layout/activity_main.xml & layout/activity_rss_list.xml & layout/rss_item_row.xml 10 entrega • package es.upm.dit.adsw.ej7 • todas las clases java que haya hecho – directorio java/... • todos los recursos adicionales – directorio res/... ADSW 11