Android’Development

imaginaryfleetΚινητά – Ασύρματες Τεχνολογίες

19 Ιουλ 2012 (πριν από 5 χρόνια και 3 μήνες)

309 εμφανίσεις

Android  Development  
Accessing  
Databases
 and  
Web  Services  
Presen7ng  Data  in  
ListViews
 
Sunny  
Dhillon
 
h>p://sdhillon.com  
1  
Downloads  


Slides  and  source  code  for  demos  available  at  
h>p://bit.ly/sdroid  
2  
SQLite
 Databases  


Android  comes  with  
SQLite
 
built  in
.  


The  SDK  does  most  of  the  heavy  liHing  for  you,  all  you  need  to  
do  is  provide  methods  to  CREATE,  UPDATE,  INSERT,  and/or  
DELETE.  


Extend  
SQLiteOpenHelper
 to  gain  access  to  a  database  
3  
SQLite
OpenHelper
   


Override  two  methods  in  
SQLiteOpenHelper
   


onCreate
 


Ini7aliazi7on
 and  setup,  e.g.  CREATE  TABLE,  and  INSERT  
default  data  


onUpgrade
 


Convert  older  schema  to  new  schema  or  just  DROP  all  
tables  and  call  
onCreate
 to  recreate  the  newer  schema  
tables  
4  
SQLite
 Tips  


I  suggest  to  wrap  
SQLiteOpenHandler
 in  another  class  to  
separate  your  SQL  statements  from  your  presenta7on  logic  


An  SQL  query  returns  a  Cursor  object  which  will  let  you  iterate  
over  the  result  set  


Use  a  while  loop  and  
moveToNext
()  to  iterate  the  result  set  


Get  terminal  access  to  the  db  by  using  command  
adb
 shell  


cd
 to  data/data/<package  name>/databases  


The  databases  you  created  should  be  placed  there  
5  
ListViews
 


ListViews
 can  be  customized  to  display  text,  images,  bu>ons,  etc.  


You  can  a>ach  listeners  that  will  no7fy  you  when  an  interes7ng  event  
occurs  


setOnItemClickListener
(
AdapterView.OnItemClickListener
 listener)  


Here  is  where  you  can  process  the  click  and  send  them  to  a  
different  ac7vity  


setOnItemLongClickListener
(
AdapterView.OnItemLongClickListener
 
listener)  


Here  is  where  you    usually  show  a  context  menu  (like  the  right-­‐click  
on  your  mouse)  to  allow  them  to  delete  an  row,  edit  it,  etc.  
6  
ListView
,  List  Items,  XML,  and  wait  
what?  
7  
ListView
,  part  
of  a  layout  xml  
file  
List  Item,  its  own  xml    
layout  file  
id  =  icon,  node  in    the    
list  item  layout  file  
id  =  header  
id  =  type  
How  do  I  add  
rows
 to  the  list?
 


Adapters
 act  as  a  bridge  between  an  
AdapterView
 (
Li stVi ew
)  
and  the  underlying  data  for  that  view.  


There  are  many  provided  adapters,  but  you  can  build  your  
own  if  you  like  by  extending  
BaseAdapter
 


ArrayAdapter
<T>  


CursorAdapter
 


SimpleAdapter
 


SimpleCursorAdapter
 


SpinnerAdapter
 
8  
When  do  I  use  each  adapter?  


For  simple  text  lists  an  
ArrayAdapter
<T>
 should  suffice  


Map  strings  to  list  item  ids  


SimpleAdapter
 is  good  for  mapping  mul7ple  objects  (text,  
images,  etc.)  to  different  list  item  elements  (icon,  header,  
subtext,  etc.)  


SimpleCursorAdapter
 is  similar  to  simple  adapter  except  
instead  of  an  array  its  data  source  is  a  Cursor  object  


Map  columns  to  list  item  ids  


Anything  more  complicated  should  extend  
BaseAdapter
 
9  
How  do  I  open  a  
new  Ac7vity
?  


Intents  allow  you  to  not  only  open  up  your  ac7vi7es,  but  other  ac7vi7es  as  
well  


Open  YouTube,  Browser,  Twi>er,  Street  View,  Maps,  Contacts,  Images,  SMS  
etc.  


You  need  to  ask  permission  for  some  ac7vi7es,  i.e.  ACCESS_INTERNET,  READ_CONTACTS,  
etc.  Add  this  to  your  Android  manifest  file.  


Note:  make  sure  you  add  your  new  ac7vi7es  to  the  Android  manifest  file  


Intents  allow  you  to  pass  
serializable
 data  across  ac7vi7es  


Examples:  


Intent  
i
=  new  Intent(
Intent.VIEW_ACTION
,  
Uri.parse
("h>p://
www.google.com"));  


Intent  
i
=  new  Intent(
Intent.ACTION_CALL
,  
Uri.parse
(“tel:4082259211”));  


Intent  
i
 =  new  Intent(c,  
TransitRouteMapView.class
);  


i.putExtra
(
KEY_TRANSIT_CONTROLLER,  
tc
);  


i.putExtra
(
KEY_ROUTE_ID,  
routeId
);
 


Intent  registry:  
h>p://www.openintents.org/en/intentstable
 
10  
Um,  OK,  but  can  I  see  some  code?  


This  sample  has  an  
SQLite
 db  filled  with  characters  from  the  show  Lost  


I  CREATE  the  db  schema  in  
onCreate
 and  INSERT  ini7al  data  


The  rows  are  mapped  to  a  
ListView
 using  a  
SimpleCursorAdapter
 


Based  on  
NotePad
 tutorial  located  at  
h>p://developer.android.com/intl/de/guide/tutorials/notepad/index.html
 
11  
Accessing  the  Network  


Sending  requests  is  really  simple  


URL  
url
 =  new  URL(“h>p://mywebservice.com/students”)  


InputStream
 is  =  
url.openStream
()  


An  input  stream  can  be  converted  to  a  String  and  you  can  
then  parse  the  result  (JSON  or  XML)  


Note:  since  you  do  not  have  control  over  the  network,  you  
should  do  this  in  a  background  thread  using  
AsyncTasks
 
12  
Another  Sample
 


This  demo  fetches  a  user’s  twi>er  feed  and  finds  any  posts  
that  are  hash  tagged  with  
nowplaying
 


It  sends  a  request  to  the  Twi>er  API  and  then  parses  the  
response  


There  are  a  couple  of  issues  however  


Fixed  in  the  advanced  sample  project  
13  
Resources  


API  Documenta7on  


h>p://developer.android.com/intl/de/reference/
packages.html
 


AndDev
 


h>p://www.anddev.org/
 


StackOverflow
 [Android]  


h>p://stackoverflow.com/ques7ons/tagged/android
 


Android  
Drawables
 


h>p://androiddrawableexplorer.appspot.com/
 


Android  Icons  


h>p://www.androidicons.com/
 
14  
Ques7ons?  
15