Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix...

13
Applied Cognitive Computing Fall 2016 Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application that uses IBM Bluemix’ Cloudant NoSQL DB. The application will communicate with a Cloudant NoSQL data base and perform read/write operations on it. 1. Open Android Studio, click on File->New ->New Project (you are free to use any application name and company domain)

Transcript of Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix...

Page 1: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

AppliedCognitiveComputingFall2016

AndroidApplication+IBMBluemix(CloudantNoSQLDB)

Inthisexercise,wewillcreateasimpleAndroidapplicationthatusesIBMBluemix’CloudantNoSQLDB.TheapplicationwillcommunicatewithaCloudantNoSQLdatabaseandperformread/writeoperationsonit.

1. OpenAndroidStudio,clickonFile->New->NewProject(youarefreetouseanyapplicationnameandcompanydomain)

Page 2: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

2. ClickonNext,andmakesureonly“PhoneanTablet”ischecked.MakesureminimumSDKissettoAPI19orgreater.

3. ClickonNext,andselectEmptyActivity.

4. ClickonNext,andthenclickonFinish

Page 3: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

5. Openapp->java->res->layout->activity_main.xml.Then,clickonText

Page 4: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

6. ModifytheXMLfile,sothatitlookslikethis:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="-------------------------DO NOT CHANGE ANYTHING HERE--------------------------"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Write" android:id="@+id/writeButton" android:layout_alignParentTop="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/idEditText" android:layout_below="@+id/writeButton" android:layout_alignParentEnd="true" android:layout_alignParentStart="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Read" android:id="@+id/readButton" android:layout_below="@+id/idEditText" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/responseEditText" android:layout_below="@+id/readButton" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" /> </RelativeLayout>

7. Openapp->java->---context----->MainActivity.java

Page 5: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

8. AddthefollowingfieldstoyourMainActivityclassprivate String DB_NAME = ""; private String ACCOUNT = ""; private String USERNAME = ""; private String PASSWORD = "";

9. AddthefollowingmethodsandclassestoyourMainActivityclass:private void setUpWriteButton() { Button button = (Button) findViewById(R.id.writeButton); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { writeButtonPressed(); } }); } private void setUpReadButton() { Button button = (Button) findViewById(R.id.readButton); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { readButtonPressed(); } }); } private void writeButtonPressed() { new WriteAsyncTask().execute(); }

Page 6: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

private void readButtonPressed() { EditText idEditText = (EditText) findViewById(R.id.idEditText); String id = idEditText.getText().toString(); new ReadAsyncTask().execute(id); } class WriteAsyncTask extends AsyncTask<Void, Void, User> { @Override protected User doInBackground(Void... arg0) { User user = null; try { // Create a new CloudantClient instance for account endpoint <ACCOUNT>.cloudant.com CloudantClient client = ClientBuilder.account(ACCOUNT) .username(USERNAME) .password(PASSWORD) .build(); // Get a Database instance to interact with. Do not create it if it doesn't already exist Database db = client.database(DB_NAME, false); user = new User("RandomFirstName", "RandomLastName", new Date(), 18); db.save(user); } catch (Exception e) { e.printStackTrace(); } return user; } @Override protected void onPostExecute(User user) { super.onPostExecute(user); EditText responseEditText = (EditText) findViewById(R.id.responseEditText); responseEditText.setText("User created:\nID:" + user.getId()); } } class ReadAsyncTask extends AsyncTask<String, Void, User> { @Override protected User doInBackground(String... arg0) { User user = null; try { String id = arg0[0]; // Create a new CloudantClient instance for account endpoint <ACCOUNT>.cloudant.com CloudantClient client = ClientBuilder.account(ACCOUNT) .username(USERNAME) .password(PASSWORD) .build(); // Get a Database instance to interact with. Do not create it if it doesn't already exist Database db = client.database(DB_NAME, false); // Get an ExampleDocument out of the database and deserialize the JSON into a Java type user = db.find(User.class, id);

Page 7: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

} catch (Exception e){ e.printStackTrace(); } return user; } @Override protected void onPostExecute(User user) { super.onPostExecute(user); EditText responseEditText = (EditText) findViewById(R.id.responseEditText); if (user != null) { responseEditText.setText("Read user from DB:\n" + "ID: " + user.getId() + "\n" + "FirstName: " + user.getFirstName() + "\n" + "LastName: " + user.getLastName() + "\n" + "Creation Date: " + user.getCreationDate().toString() + "\n" + "Age: " + user.getAge() + "\n" ); } else { responseEditText.setText("User not found"); } } }

10. CallthemethodssetUpWriteButton()andsetUpReadButton()attheendoftheonCreatemethod:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setUpWriteButton(); setUpReadButton(); }

11. Createanewclass.NameitUser

// A Java class that can be serialized to JSON public class User { private String _id; private String firstName; private String lastName; private Date creationDate; private int age; public User() { new User("firstNameTest", "lastNameTest", new Date(), -1); } public User(String firstName, String lastName, Date creationDate, int age) { this._id = UUID.randomUUID().toString(); this.firstName = firstName; this.lastName = lastName; this.creationDate = creationDate; this.age = age;

Page 8: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

} public String getId() { return _id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this.creationDate = creationDate; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

12. OpenGradleScripts->build.gradle(Module:app).Addthefollowinglinesinthedependenciessection:

compile group: 'com.squareup.okhttp', name: 'okhttp-urlconnection', version: '2.7.5' compile group: 'com.cloudant', name: 'cloudant-client', version: '2.6.0' compile 'com.google.code.gson:gson:2.2.4'

13. Wearereadytosetupourdatabase.Gotothispage:https://new-

console.ng.bluemix.net/andlogin

14. ClickonCatalog

Page 9: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

15. SelectData&Analytics,andthenclickon“CloudantNoSQLDB”

16. ScrolltothebottomofthepageandclickonCreate

17. ClickonLaunch

Page 10: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

18. ClickonDatabasesandthenclickonCreateDatabase

19. GiveanametoyourdatabaseandclickonCreate.20. OncethenewDBiscreated,clickonPermissions

Page 11: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

21. LocateandpresstheGenerateAPIKeybutton.WewillusetheAPIkeytocommunicatewiththedatabaseprogrammatically.

22. OncetheAPIkeyiscreated,you’llseesomethinglikethis:

Page 12: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

23. Leavethatpageopened.Wewillbecopyingthekeyanditspasswordtoourcode.

24. Givereadandwritepermissionstothekeyyoujustcreated

25. GobacktoyourAndroidprojectandlocatethefollowingvariables: private String DB_NAME = ""; private String ACCOUNT = ""; private String USERNAME = ""; private String PASSWORD = "";

26. Thevariablemustbeinitializedwiththefollowingvalues:

private String DB_NAME = "<Name you gave to the DB in step 18>"; private String ACCOUNT = "<See below>"; private String USERNAME = "<The Key you generated in step 21>"; private String PASSWORD = "<The password the key was given when generated>";

27. ThevalueyoushouldassigntothevariableACCOUNTcanbefoundintheURLofthepagewhereyoumanageyourdatabase.TheURLhasthefollowingformat.

https://<YouraccountID>.cloudant.com/dashboard.html Copythe<YouraccountID>sectionoftheURL,andusethattoinitializeACCOUNT

28. AddthefollowingtoyourAndroidManifest.xmlfile:<uses-permission android:name="android.permission.INTERNET" />

Page 13: Applied Cognitive Computing Fall 2016 Android Application ... · Android Application + IBM Bluemix (Cloudant NoSQL DB) In this exercise, we will create a simple Android application

29. Testyourapp