I want to use Personality Insights Service of IBM. I have downloaded Hello Wold sample code and trying to integrate Personality Insights Service in it.
My code is like below.
MainActivity.java
package com.ibm.bms.samples.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.ibm.mobilefirstplatform.clientsdk.android.core.api.BMSClient;
import com.ibm.mobilefirstplatform.clientsdk.android.core.api.Request;
import com.ibm.mobilefirstplatform.clientsdk.android.core.api.Response;
import com.ibm.mobilefirstplatform.clientsdk.android.core.api.ResponseListener;
import com.ibm.watson.developer_cloud.personality_insights.v2.PersonalityInsights;
import com.ibm.watson.developer_cloud.personality_insights.v2.model.Profile;
import org.json.JSONObject;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
public class MainActivity extends Activity implements ResponseListener {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView buttonText = (TextView) findViewById(R.id.button_text);
try {
//initialize SDK with IBM Bluemix application ID and route
//TODO: Please replace <APPLICATION_ROUTE> with a valid ApplicationRoute and <APPLICATION_ID> with a valid ApplicationId
BMSClient.getInstance().initialize(this, "http://bluemixpersonality.mybluemix.net", "b8c06c80-83fa-4448-b770-3ff5b3f1fb84");
} catch (MalformedURLException mue) {
this.setStatus("Unable to parse Application Route URL\n Please verify you have entered your Application Route and Id correctly and rebuild the app", false);
buttonText.setClickable(false);
}
}
public void pingBluemix(View view) {
TextView buttonText = (TextView) findViewById(R.id.button_text);
buttonText.setClickable(false);
TextView errorText = (TextView) findViewById(R.id.error_text);
errorText.setText("Pinging Bluemix");
Log.i(TAG, "Pinging Bluemix");
// Testing the connection to Bluemix by sending a Get request to the Node.js application, using this Activity to handle the response.
// This Node.js code was provided in the MobileFirst Services Starter boilerplate.
// The below request uses the IBM Mobile First Core sdk to send the request using the applicationRoute that was provided when initializing the BMSClient earlier.
new Request(BMSClient.getInstance().getBluemixAppRoute(), Request.GET).send(this.getApplicationContext(), this);
}
private void setStatus(final String messageText, boolean wasSuccessful) {
final TextView errorText = (TextView) findViewById(R.id.error_text);
final TextView topText = (TextView) findViewById(R.id.top_text);
final TextView bottomText = (TextView) findViewById(R.id.bottom_text);
final TextView buttonText = (TextView) findViewById(R.id.button_text);
final String topStatus = wasSuccessful ? "Yay!" : "Bummer";
final String bottomStatus = wasSuccessful ? "You Are Connected" : "Something Went Wrong";
runOnUiThread(new Runnable() {
@Override
public void run() {
buttonText.setClickable(true);
errorText.setText(messageText);
topText.setText(topStatus);
bottomText.setText(bottomStatus);
}
});
}
// Implemented for the response listener to handle the success response when Bluemix is pinged
@Override
public void onSuccess(Response response) {
Log.e("Response: ", response.getResponseText());
String myProfile = "Call me Ishmael. Some years ago-never mind how long precisely-having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people's hats off-then, I account it high time to get to sea as soon as I can.";
PersonalityInsights service = new PersonalityInsights();
service.setUsernameAndPassword("{username}","{password}");
Profile personalityProfile = service.getProfile(myProfile);
Log.e("hahah: ", "" + personalityProfile);
setStatus("", true);
Log.i(TAG, "Successfully pinged Bluemix!");
}
// Implemented for the response listener to handle failure response when Bluemix is pinged
@Override
public void onFailure(Response response, Throwable throwable, JSONObject jsonObject) {
// Blah Blah Code on Failing to connect to IBM.
}
}
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.ibm.bms.samples.android.helloworld"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.0'
compile group: 'com.ibm.mobilefirstplatform.clientsdk.android',
name: 'core',
version: '1.+',
ext: 'aar',
transitive: true
compile 'com.ibm.watson.developer_cloud:java-wrapper:1.0.3'
}
I have referred below link.
How to call Watson Insights Service using java
I am getting bellow error.
Note: I have set CORRECT username & password for Personality Insights Service.
Look like you are using the java-wrapper:1.0.3
. That's pretty old, and we fixed and improved the library a lot since that release.
The 401 means that you didn't provide the right credentials or the service URL is not correct. You can set the service URL by calling service.setEndPoint()
See the example below:
Update the dependency in gradle to be:
'com.ibm.watson.developer_cloud:java-sdk:5.3.0'
Then use this code:
PersonalityInsights service = new PersonalityInsights();
service.setUsernameAndPassword("<username>", "<password>");
service.setEndPoint("https://gateway.watsonplatform.net/personality-insights/api")
String text = "your text goes here...."
ProfileOptions options = new ProfileOptions.Builder()
.text(text)
.build();
Profile profile = service.profile(options).execute();
System.out.println(profile);
Make sure you have credentials for the Personality Insights service(tiered
plan). If you need help take a look at this guide.
Finally your service credentials are not your Bluemix credentials.