Android 应用程序示例的 Watson Personality Insights 服务
Watson Personality Insights Service for Android Application Sample
我想使用 IBM 的 Personality Insights Service。我已经下载了 Hello Wold 示例代码并尝试在其中集成 Personality Insights Service。
我的代码如下。
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'
}
我在下面提到了link。
How to call Watson Insights Service using java
我遇到以下错误。
注意:我已经为 Personality Insights 服务设置了正确的用户名和密码。
看起来您正在使用 java-wrapper:1.0.3
。那已经很老了,自该版本发布以来,我们对库进行了很多修复和改进。
401 表示您没有提供正确的凭据或服务 URL 不正确。您可以通过调用 service.setEndPoint()
来设置服务 URL
参见下面的示例:
将 gradle 中的依赖项更新为:
'com.ibm.watson.developer_cloud:java-sdk:5.3.0'
然后使用此代码:
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);
确保您拥有 Personality Insights 服务(tiered
计划)的凭据。如果您需要帮助,请查看此 guide.
最后,您的服务凭证 不是 您的 Bluemix 凭证。
我想使用 IBM 的 Personality Insights Service。我已经下载了 Hello Wold 示例代码并尝试在其中集成 Personality Insights Service。
我的代码如下。
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'
}
我在下面提到了link。
How to call Watson Insights Service using java
我遇到以下错误。
注意:我已经为 Personality Insights 服务设置了正确的用户名和密码。
看起来您正在使用 java-wrapper:1.0.3
。那已经很老了,自该版本发布以来,我们对库进行了很多修复和改进。
401 表示您没有提供正确的凭据或服务 URL 不正确。您可以通过调用 service.setEndPoint()
参见下面的示例:
将 gradle 中的依赖项更新为:
'com.ibm.watson.developer_cloud:java-sdk:5.3.0'
然后使用此代码:
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);
确保您拥有 Personality Insights 服务(tiered
计划)的凭据。如果您需要帮助,请查看此 guide.
最后,您的服务凭证 不是 您的 Bluemix 凭证。