Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CouchDB on Android
aboutSven Haiges, hybris GmbH  Twitter @hansamann    Android, HTML5,    Groovy & Grails sven.haiges@hybris.de
aboutSven Haiges, hybris GmbH  Twitter @hansamann    Android, HTML5,    Groovy & Grails sven.haiges@hybris.de
CouchDB
Erlang on                                     Android!Source: http://couchdb.apache.org/
sync
CouchDB• document-based, RESTful HTTP API• replication built-in• both database and web server• no locks, uses multi-versio...
<host>/_utils = Futon Admin
Mobile Futon
Accessingyour couch
adb forward tcp:5999 tcp:33595
build your own
#1 new android    project
#2 add couchbase.ziphttp://www.couchbase.org/get/couchbase-mobile-for-                 android/current
#3 run as Ant file
done...
AndroidManifest.xml<?xml version="1.0" encoding="UTF-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/andro...
in your Activity...private final ICouchbaseDelegate mDelegate = new ICouchbaseDelegate() {     public void couchbaseStarte...
in your Activity...@Overrideprotected void onResume() {	   super.onResume();	   CouchbaseMobile couch = new CouchbaseMobil...
ektorp
AndCouch
AndCouch• https://github.com/daleharvey/Android-  MobileFuton• Just a quick HTTP wrapper, but gets the job  done!• CouchDe...
Todo.javapublic class Todo {		   private String id;	   private String rev;	   private String text;	   private long timesta...
CreatingString value = input.getText().toString();JSONObject obj = new JSONObject();try   {	     obj.put("type", "todo");	...
Reading (all)try {	   todos.clear();	   JSONObject json = AndCouch.get(baseURL + DB_NAME + "/_design/todo/_view/all").json...
Reading (all)try {	   todos.clear();	   JSONObject json = AndCouch.get(baseURL + DB_NAME + "/_design/todo/_view/all").json...
Design Documents• normal json documents, but ids begin with  _design/, e.g. _design/myapp (no %2F :-)• contain views (Map ...
Simple Design Doc{	    "_id":"_design/todo",	    "views" : {	    	    "all" : {	    	    	   "map": "function(doc) { if (d...
DeletingSparseBooleanArray spar = getListView().getCheckedItemPositions();for   (int i = 0; i < todos.getCount(); i++) {	 ...
Remote PushJSONObject obj = new JSONObject();try   {	     obj.put("create_target", true);	     obj.put("source", baseURL +...
CouchApps
CouchApps• JavaScript and HTML5 apps served from  CouchDB• No middle tier, Couch is DB + application  server• CouchApp.org...
aboutSven Haiges, hybris GmbH  Twitter @hansamann    Android, HTML5,    Groovy & Grails sven.haiges@hybris.de
aboutSven Haiges, hybris GmbH  Twitter @hansamann    Android, HTML5,    Groovy & Grails sven.haiges@hybris.de             ...
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
CouchDB on Android
Upcoming SlideShare
Loading in …5
×

CouchDB on Android

7,911 views

Published on

Published in: Technology
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/36cXjBY ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I use project of : https://github.com/daleharvey/Android- MobileFuton. and try to "creat" and "read", "creat" is ok but "read" always return an empty JSON. Please check your project for this. Thanks!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

CouchDB on Android

  1. 1. CouchDB on Android
  2. 2. aboutSven Haiges, hybris GmbH Twitter @hansamann Android, HTML5, Groovy & Grails sven.haiges@hybris.de
  3. 3. aboutSven Haiges, hybris GmbH Twitter @hansamann Android, HTML5, Groovy & Grails sven.haiges@hybris.de
  4. 4. CouchDB
  5. 5. Erlang on Android!Source: http://couchdb.apache.org/
  6. 6. sync
  7. 7. CouchDB• document-based, RESTful HTTP API• replication built-in• both database and web server• no locks, uses multi-version concurrency control• Map & Reduce Functions = Views
  8. 8. <host>/_utils = Futon Admin
  9. 9. Mobile Futon
  10. 10. Accessingyour couch
  11. 11. adb forward tcp:5999 tcp:33595
  12. 12. build your own
  13. 13. #1 new android project
  14. 14. #2 add couchbase.ziphttp://www.couchbase.org/get/couchbase-mobile-for- android/current
  15. 15. #3 run as Ant file
  16. 16. done...
  17. 17. AndroidManifest.xml<?xml version="1.0" encoding="UTF-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.flavor.relax" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".RelaxActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:exported="false" android:enabled="true" android:name="com.couchbase.android.CouchbaseService" /> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></manifest>
  18. 18. in your Activity...private final ICouchbaseDelegate mDelegate = new ICouchbaseDelegate() { public void couchbaseStarted(String host, int port) { Toast.makeText(RelaxActivity.this, host + ":" + port, Toast.LENGTH_LONG).show(); } public void installing(int completed, int total) { Log.d("demo", "Installing... " + completed + "/" + total); } public void exit(String error) { Log.d("demo", error); }};
  19. 19. in your Activity...@Overrideprotected void onResume() { super.onResume(); CouchbaseMobile couch = new CouchbaseMobile(getBaseContext(), mDelegate); couchServiceConnection = couch.startCouchbase();}
  20. 20. ektorp
  21. 21. AndCouch
  22. 22. AndCouch• https://github.com/daleharvey/Android- MobileFuton• Just a quick HTTP wrapper, but gets the job done!• CouchDemo App...
  23. 23. Todo.javapublic class Todo { private String id; private String rev; private String text; private long timestamp; public Todo(String id, String rev, String text, long timestamp) { super(); this.id = id; this.rev = rev; this.text = text; this.timestamp = timestamp; } ...}
  24. 24. CreatingString value = input.getText().toString();JSONObject obj = new JSONObject();try { obj.put("type", "todo"); obj.put("text", value); obj.put("timestamp", new Date().getTime()); JSONObject result = AndCouch.put(baseURL + DB_NAME + "/" + UUID.randomUUID().toString(), obj.toString()).json; if (result.getBoolean("ok") == true) refreshTodos();} catch (JSONException e) { e.printStackTrace();}
  25. 25. Reading (all)try { todos.clear(); JSONObject json = AndCouch.get(baseURL + DB_NAME + "/_design/todo/_view/all").json; JSONArray rows = json.getJSONArray("rows"); for (int i = 0; i < rows.length(); i++) { JSONObject todoObj = rows.getJSONObject(i); JSONArray value = todoObj.getJSONArray("value"); todos.add(new Todo(todoObj.getString("id"), value.getString(1), value.getString(0), todoObj.getLong("key"))); } todos.notifyDataSetChanged();} catch (JSONException e) { e.printStackTrace();}
  26. 26. Reading (all)try { todos.clear(); JSONObject json = AndCouch.get(baseURL + DB_NAME + "/_design/todo/_view/all").json; JSONArray rows = json.getJSONArray("rows"); for (int i = 0; i < rows.length(); i++) { JSONObject todoObj = rows.getJSONObject(i); JSONArray value = todoObj.getJSONArray("value"); todos.add(new Todo(todoObj.getString("id"), value.getString(1), value.getString(0), todoObj.getLong("key"))); } todos.notifyDataSetChanged();} catch (JSONException e) { e.printStackTrace();}
  27. 27. Design Documents• normal json documents, but ids begin with _design/, e.g. _design/myapp (no %2F :-)• contain views (Map & Reduce functions) as well as other application functions (validation, show/list)
  28. 28. Simple Design Doc{ "_id":"_design/todo", "views" : { "all" : { "map": "function(doc) { if (doc.type && doc.type === todo){ emit(doc.timestamp, [doc.text, doc._rev]); }};" } }}
  29. 29. DeletingSparseBooleanArray spar = getListView().getCheckedItemPositions();for (int i = 0; i < todos.getCount(); i++) { if (spar.get(i)) { Todo todo = todos.getItem(i); getListView().setItemChecked(i, false); try { AndCouch.httpRequest("DELETE", baseURL + DB_NAME + "/" + todo.getId() + "?rev=" + todo.getRev(), null, new String[][] {}); } catch (JSONException e) { e.printStackTrace(); } }}refreshTodos();
  30. 30. Remote PushJSONObject obj = new JSONObject();try { obj.put("create_target", true); obj.put("source", baseURL + DB_NAME); obj.put("target", "http:// hansamann.iriscouch.com/todo"); JSONObject result = AndCouch.post(baseURL + "_replicate", obj.toString()).json;} catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace();}
  31. 31. CouchApps
  32. 32. CouchApps• JavaScript and HTML5 apps served from CouchDB• No middle tier, Couch is DB + application server• CouchApp.org hosts the CouchApp development tool that pushes changes to a Couch instance
  33. 33. aboutSven Haiges, hybris GmbH Twitter @hansamann Android, HTML5, Groovy & Grails sven.haiges@hybris.de
  34. 34. aboutSven Haiges, hybris GmbH Twitter @hansamann Android, HTML5, Groovy & Grails sven.haiges@hybris.de NFC

×