SlideShare a Scribd company logo
Android REST-client applications:
       services approach
         Sharing experience
Case
Case
       New startup
Case
       New startup
Case
       New startup
Case
       New startup
Case
       New startup

          stores
          posts
          sends

         provides
          notifies
         suggests
Case
       New startup


          REST
REST
https://api.twitter.com/1/users/show.json?screen_name=roman_mazur



     {
         id : 14701612,
         name : “Roman Mazur”,
         location : “Ukraine, Kyiv”,
         …
     }
How to perform requests
@Override
public void onClick(View view) {
  URLConnection connection
    = new URL(…).openConnection();
  …
}
How to perform requests
@Override
public void onClick(View view) {
  URLConnection connection
    = new URL(…).openConnection();
  …
}
How to perform requests
• Obviously: not in the main (GUI) thread

• Using either URLConnection or HttpClient
  – both have pros and cons


• Choose context: Activity vs. Service
Why not to use activities?
• User controls activity lifecycle
• When all your activities are in background
  your process is a candidate for killing
• You’ll lose your data
Services Way
• See also
  – Google IO 2010 session
    “Developing Android REST Client Applications”
Services: our first implementation
                      Activity


           1. onStart                 4. performRequest



                ApiMethodsSupport
      (Helper for communication with service)


                          3. registerListener
            2. bind                               5. performRequest
                             (using binder)

                        Service


                            6. HTTP GET/POST/…
Services: our first implementation
• Main problem: rotations :)
  – we register listener in onStart and remove it in
    onStop
  – what if response is received while we are rotating
    the screen?
Current implementation
• Loaders!
  – are awesome since they are not recreated in case
    of configuration changes (at least in most cases)
• Custom loader
  – binds to the service
  – registers listener
  – performs request
  – gets the result
  – unbinds
How we perform requests now


@Override
public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);

    getLoaderManager().initLoader(1, null, this);

}
How we perform requests now
@Override
public Loader<ResponseData<Profile>>
    onCreateLoader(int id, Bundle args) {

    return
      new SimpleRequestBuilder<Profile>(getActivity()) { }
        .setUrl("https://api.twitter.com/1/users/show.json")
        .addParam("screen_name", "TwitterAPI")
        .getLoader();

}
How we perform requests now
@Override
public void
    onLoadFinished(Loader<ResponseData<Profile>> loader,
                   ResponseData<Profile> data) {

    if (data.isSuccessful()) {
      Profile profile = data.getModel();
      text1.setText(profile.getName());
      text2.setText(profile.getDescription());
    }

}
How we perform requests now
@Override
public void
    onLoadFinished(Loader<ResponseData<Profile>> loader,
                   ResponseData<Profile> data) {

    if (data.isSuccessful()) {
      Profile profile = data.getModel();
      text1.setText(profile.getName());
      text2.setText(profile.getDescription());
    }

}
ResponseData
•   Result code
•   Status message
•   User visible message
•   Data
Activity Side
• Request builder creates a request description
• Description is passed to a service
  – a) as an Intent
  – b) with a service binder method
    performRequest
Service Side
• Either enqueues description processing or
  performs it in the worker thread using
  AsyncTask
• Request description builds URLConnection
• Input thread is read, parsed; result is analyzed
  and then delivered to listeners
Service Side: Response Pipeline
                       URLConnection



   ContentHandler


   Parsed object


                    ResponseDataConverter


                                 ResponseData


                       ContentAnalyzer                         Listeners
                                                  Analyzed
                                                ResponseData
Conclusions
• Power
  – requests processing can be easily managed
  – requests can triggered by notifications and
    AlarmManager
• Simplicity
  – not much to learn if you are familiar with Android
    loaders
• Caveats
  – currently not everything is easy to customize
It’s open source
But we lack documentation :)




http://code.google.com/p/enroscar/
and we are preparing to release it on GitHub
Thanks!
Roman Mazur

Head of Android Unit at Stanfy
Kyiv GDD co-organizer




mazur.roman@gmail.com
+Roman Mazur
@roman_mazur

More Related Content

PPT
Lecture 2
PDF
Live Streaming & Server Sent Events
PPTX
Microservices/dropwizard
PDF
Introduction to react
PPT
Grails Controllers
PDF
Understanding Facebook's React.js
PPTX
React js for beginners
PPTX
JS Fest 2018. Martin Chaov. SSE vs WebSockets vs Long Polling
Lecture 2
Live Streaming & Server Sent Events
Microservices/dropwizard
Introduction to react
Grails Controllers
Understanding Facebook's React.js
React js for beginners
JS Fest 2018. Martin Chaov. SSE vs WebSockets vs Long Polling

What's hot (20)

PPSX
React introduction
PDF
Learning React - I
PDF
Introduce Flux & react in practices (KKBOX)
PDF
3rd Generation Web Application Platforms
PPTX
Intro to React
PPTX
Introduction to React JS for beginners | Namespace IT
PDF
Breaking the Server-Client Divide with Node.js and React
PPTX
Introduction to React JS for beginners
PDF
Simple REST with Dropwizard
PPTX
Its time to React.js
PDF
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
PDF
Akka - Developing SEDA Based Applications
PDF
React & Flux Workshop
PDF
PPTX
The Past Year in Spring for Apache Geode
PDF
SpringMVC
PPTX
Enterprise java unit-2_chapter-2
PPTX
001. Introduction about React
PPTX
React JS: A Secret Preview
PPTX
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
React introduction
Learning React - I
Introduce Flux & react in practices (KKBOX)
3rd Generation Web Application Platforms
Intro to React
Introduction to React JS for beginners | Namespace IT
Breaking the Server-Client Divide with Node.js and React
Introduction to React JS for beginners
Simple REST with Dropwizard
Its time to React.js
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Akka - Developing SEDA Based Applications
React & Flux Workshop
The Past Year in Spring for Apache Geode
SpringMVC
Enterprise java unit-2_chapter-2
001. Introduction about React
React JS: A Secret Preview
REST Easy with AngularJS - ng-grid CRUD EXAMPLE
Ad

Similar to Android rest client applications-services approach @Droidcon Bucharest 2012 (20)

PDF
Android App Development 06 : Network &amp; Web Services
PDF
Modern Android app library stack
PDF
Android development
PPTX
Android and REST
PPTX
Binder: Android IPC
PPT
Building PHP Powered Android Applications
PDF
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
PPTX
Performance #4 network
PDF
Android dev 3
PDF
Connecting to-web-services-on-android-4577
PDF
Android Performance #4: Network
PDF
Web Service and Mobile Integrated Day I
PPTX
Mail OnLine Android Application at DroidCon - Turin - Italy
PPTX
Android Trainning Session 2
PDF
Connecting to Web Services on Android June 2 2010
PDF
GDG Algiers DevFest 2013 Cool AndroidLibs
PDF
Xamarin Workshop Noob to Master – Week 5
PPTX
02. Android application development_Lec2.pptx
PPTX
Kotlin Coroutines and Rx
PPT
Web api's
Android App Development 06 : Network &amp; Web Services
Modern Android app library stack
Android development
Android and REST
Binder: Android IPC
Building PHP Powered Android Applications
Mobile 2.0 Open Ideas WorkShop: Building Social Media Enabled Apps on Android
Performance #4 network
Android dev 3
Connecting to-web-services-on-android-4577
Android Performance #4: Network
Web Service and Mobile Integrated Day I
Mail OnLine Android Application at DroidCon - Turin - Italy
Android Trainning Session 2
Connecting to Web Services on Android June 2 2010
GDG Algiers DevFest 2013 Cool AndroidLibs
Xamarin Workshop Noob to Master – Week 5
02. Android application development_Lec2.pptx
Kotlin Coroutines and Rx
Web api's
Ad

Android rest client applications-services approach @Droidcon Bucharest 2012

  • 1. Android REST-client applications: services approach Sharing experience
  • 3. Case New startup
  • 4. Case New startup
  • 5. Case New startup
  • 6. Case New startup
  • 7. Case New startup stores posts sends provides notifies suggests
  • 8. Case New startup REST
  • 9. REST https://api.twitter.com/1/users/show.json?screen_name=roman_mazur { id : 14701612, name : “Roman Mazur”, location : “Ukraine, Kyiv”, … }
  • 10. How to perform requests @Override public void onClick(View view) { URLConnection connection = new URL(…).openConnection(); … }
  • 11. How to perform requests @Override public void onClick(View view) { URLConnection connection = new URL(…).openConnection(); … }
  • 12. How to perform requests • Obviously: not in the main (GUI) thread • Using either URLConnection or HttpClient – both have pros and cons • Choose context: Activity vs. Service
  • 13. Why not to use activities? • User controls activity lifecycle • When all your activities are in background your process is a candidate for killing • You’ll lose your data
  • 14. Services Way • See also – Google IO 2010 session “Developing Android REST Client Applications”
  • 15. Services: our first implementation Activity 1. onStart 4. performRequest ApiMethodsSupport (Helper for communication with service) 3. registerListener 2. bind 5. performRequest (using binder) Service 6. HTTP GET/POST/…
  • 16. Services: our first implementation • Main problem: rotations :) – we register listener in onStart and remove it in onStop – what if response is received while we are rotating the screen?
  • 17. Current implementation • Loaders! – are awesome since they are not recreated in case of configuration changes (at least in most cases) • Custom loader – binds to the service – registers listener – performs request – gets the result – unbinds
  • 18. How we perform requests now @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(1, null, this); }
  • 19. How we perform requests now @Override public Loader<ResponseData<Profile>> onCreateLoader(int id, Bundle args) { return new SimpleRequestBuilder<Profile>(getActivity()) { } .setUrl("https://api.twitter.com/1/users/show.json") .addParam("screen_name", "TwitterAPI") .getLoader(); }
  • 20. How we perform requests now @Override public void onLoadFinished(Loader<ResponseData<Profile>> loader, ResponseData<Profile> data) { if (data.isSuccessful()) { Profile profile = data.getModel(); text1.setText(profile.getName()); text2.setText(profile.getDescription()); } }
  • 21. How we perform requests now @Override public void onLoadFinished(Loader<ResponseData<Profile>> loader, ResponseData<Profile> data) { if (data.isSuccessful()) { Profile profile = data.getModel(); text1.setText(profile.getName()); text2.setText(profile.getDescription()); } }
  • 22. ResponseData • Result code • Status message • User visible message • Data
  • 23. Activity Side • Request builder creates a request description • Description is passed to a service – a) as an Intent – b) with a service binder method performRequest
  • 24. Service Side • Either enqueues description processing or performs it in the worker thread using AsyncTask • Request description builds URLConnection • Input thread is read, parsed; result is analyzed and then delivered to listeners
  • 25. Service Side: Response Pipeline URLConnection ContentHandler Parsed object ResponseDataConverter ResponseData ContentAnalyzer Listeners Analyzed ResponseData
  • 26. Conclusions • Power – requests processing can be easily managed – requests can triggered by notifications and AlarmManager • Simplicity – not much to learn if you are familiar with Android loaders • Caveats – currently not everything is easy to customize
  • 27. It’s open source But we lack documentation :) http://code.google.com/p/enroscar/ and we are preparing to release it on GitHub
  • 28. Thanks! Roman Mazur Head of Android Unit at Stanfy Kyiv GDD co-organizer mazur.roman@gmail.com +Roman Mazur @roman_mazur