我正在尝试制作一个应用程序,我可以直接从我的应用程序在我的 LinkedIn 墙上发布消息。我已经使用 LinkedIn 网站上的开发人员文档成功创建了登录和身份验证部分。我在 LinkedIn 墙上发布更新时遇到问题。
这是我正在编写的代码:-
package com.techage.techsuite;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.EditText;
import com.linkedin.platform.APIHelper;
import com.linkedin.platform.AccessToken;
import com.linkedin.platform.LISession;
import com.linkedin.platform.LISessionManager;
import com.linkedin.platform.errors.LIApiError;
import com.linkedin.platform.errors.LIAuthError;
import com.linkedin.platform.listeners.ApiListener;
import com.linkedin.platform.listeners.ApiResponse;
import com.linkedin.platform.listeners.AuthListener;
import com.linkedin.platform.utils.Scope;
import com.techage.techsuite.DBUtils.DatabaseContract.LinkedInDetails;
import com.techage.techsuite.DBUtils.LinkedInDetailsCRUD;
import com.techage.techsuite.JSONUtils.JSONUtils;
public class LinkedInActivity extends Activity {
private AccessToken accessToken;
private static final String host = "api.linkedin.com";
private static final String topCardUrl = "https://"
+ host
+ "/v1/people/~:(id,first-name,last-name,public-profile-url,picture-url,email-address,picture-urls::(original))";
Activity activity = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.activity_linkedin);
// Checking the linkedin app installation on the device
activity = LinkedInActivity.this;
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onResume()
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
LISessionManager sessionManager = LISessionManager
.getInstance(activity);
final LISession session = sessionManager.getSession();
boolean accessTokenValid = session.isValid();
if (!accessTokenValid) {
login();
} else {
Log.d("Activity", session.getAccessToken().toString() + "");
Log.d("Activity", session.getAccessToken().toString() + "");
Log.d("Activity", session.getAccessToken().toString() + "");
Log.d("Activity", session.getAccessToken().toString() + "");
saveLinkedInAccessTokenInDB(session.getAccessToken().toString());
}
}
/**
* @param string
*/
private void saveLinkedInAccessTokenInDB(String accessTokenJSON) {
//
LinkedInDetailsCRUD crud = new LinkedInDetailsCRUD(
LinkedInActivity.this);
try {
JSONObject jsonObject = new JSONObject(accessTokenJSON);
ContentValues contentValues = new ContentValues();
contentValues.put(LinkedInDetails.COLUMN_NAME_ACCESS_TOKEN,
jsonObject.getString(JSONUtils.LINKEDIN_ACCESS_TOKEN));
crud.insertOrUpdateUser(contentValues);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Build the list of member permissions our LinkedIn session requires
private static Scope buildScope() {
return Scope.build(Scope.R_BASICPROFILE, Scope.W_SHARE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Add this line to your existing onActivityResult() method
LISessionManager sessionManager = LISessionManager
.getInstance(activity);
final LISession session = sessionManager.getSession();
sessionManager.onActivityResult(this, requestCode, resultCode, data);
Log.d("Activity", session.getAccessToken().toString() + "");
getProfile();
}
private void login() {
LISessionManager sessionManager = LISessionManager
.getInstance(activity);
final LISession session = sessionManager.getSession();
sessionManager.init(activity, buildScope(), new AuthListener() {
@Override
public void onAuthSuccess() {
Log.d("Activity", session.getAccessToken().toString() + "");
accessToken = session.getAccessToken();
saveLinkedInAccessTokenInDB(accessToken.toString());
getProfile();
}
@Override
public void onAuthError(LIAuthError error) {
}
}, true);
}
public void getProfile() {
APIHelper apiHelper = APIHelper.getInstance(activity);
apiHelper.getRequest(activity, topCardUrl, new ApiListener() {
@Override
public void onApiSuccess(ApiResponse s) {
Log.d("Api Response", s + "");
}
@Override
public void onApiError(LIApiError error) {
}
});
}
/**
*
* @param comment
* The comment to be shared over the status update
* @param title
* The Title of the shared content
* @param description
* The description of the shared content
* @param submitted_url
* The shared URL
* @param submitted_image_url
* The image to be displayed on the shared URL
* @throws JSONException
*/
private void postMessageOnLinkedInWall(String comment, String title,
String description, String submitted_url, String submitted_image_url) {
// Posting message on LinkedIn wall
String url = "https://api.linkedin.com/v1/people/~/shares";
JSONObject jsonObjectLinkedIn = new JSONObject();
try {
JSONObject jsonObjectVisibility = new JSONObject();
jsonObjectVisibility.put(JSONUtils.CODE, "anyone");
JSONObject jsonObjectContent = new JSONObject();
jsonObjectContent.put(JSONUtils.TITLE, title);
jsonObjectContent.put(JSONUtils.DESCRIPTION, description);
jsonObjectContent.put(JSONUtils.SUBMITTED_URL, submitted_url);
jsonObjectContent.put(JSONUtils.SUBMITTED_IMGE_URL,
submitted_image_url);
jsonObjectLinkedIn.put(JSONUtils.VISIBILTY, jsonObjectVisibility);
jsonObjectLinkedIn.put(JSONUtils.CONTENT, jsonObjectContent);
jsonObjectLinkedIn.put(JSONUtils.COMMENT, comment);
JSONObject body = new JSONObject(
"{"
+ "\"comment\": \"Testing mobile share\","
+ "\"visibility\": { \"code\": \"anyone\" },"
+ "\"content\": { "
+ "\"title\": \"Testing mobile share\","
+ "\"description\": \"Testing the mobile Testing mobile share!\","
+ "\"submitted-url\": \"http://www.techagelabs.com/\","
+ "\"submitted-image-url\": \"http://http://techagelabs.com/wp-content/uploads/2015/05/New-Web-Logo-e1433227472232.png\""
+ "}" + "}");
APIHelper apiHelper = APIHelper.getInstance(activity);
apiHelper.postRequest(activity, url, jsonObjectLinkedIn,
new ApiListener() {
@Override
public void onApiError(LIApiError liApiError) {
Log.d("Api Response", liApiError + "");
}
@Override
public void onApiSuccess(ApiResponse apiResponse) {
Log.d("Api Response", apiResponse + "");
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
// private void putMessage() throws JSONException {
//
// String url =
// "https://api.linkedin.com/v1/companies/1234/updates/key=ABCDE-123456/update-comments-as-company/";
//
// JSONObject body = new JSONObject("{" + "\"comment\": \"Sample share\"}");
//
// APIHelper apiHelper = APIHelper.getInstance(activity);
// apiHelper.putRequest(activity, url, body, new ApiListener() {
// @Override
// public void onApiSuccess(ApiResponse apiResponse) {
// // Success!
// Log.d("Api Response", apiResponse + "");
// }
//
// @Override
// public void onApiError(LIApiError liApiError) {
// // Error making POST request!
// Log.d("Api Response", liApiError + "");
// }
// });
// }
public void postMessageMethod(View view) {
getProfile();
EditText editTextMessage = (EditText) findViewById(R.id.edMessage);
String comment = editTextMessage.getText().toString();
postMessageOnLinkedInWall(
comment,
"TechAge Labs",
"TechAge Labs Project",
"www.techagelabs.com",
"http://techagelabs.com/wp-content/uploads/2015/06/Mobile-App-Development-960x375-crop.jpg");
}
}
在墙上发布消息时,在postMessageOnLinkedInWall
方法内部,我收到APIHelper类的NoClassDefFoundError。
以下是我得到的错误:
07-01 11:59:08.260: E/AndroidRuntime(5028): FATAL EXCEPTION: main
07-01 11:59:08.260: E/AndroidRuntime(5028): Process: com.techage.techsuite, PID: 5028
07-01 11:59:08.260: E/AndroidRuntime(5028): java.lang.IllegalStateException: Could not execute method of the activity
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.view.View$1.onClick(View.java:4007)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.view.View.performClick(View.java:4756)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.view.View$PerformClick.run(View.java:19749)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.os.Handler.handleCallback(Handler.java:739)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.os.Handler.dispatchMessage(Handler.java:95)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.os.Looper.loop(Looper.java:135)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.app.ActivityThread.main(ActivityThread.java:5221)
07-01 11:59:08.260: E/AndroidRuntime(5028): at java.lang.reflect.Method.invoke(Native Method)
07-01 11:59:08.260: E/AndroidRuntime(5028): at java.lang.reflect.Method.invoke(Method.java:372)
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
07-01 11:59:08.260: E/AndroidRuntime(5028): Caused by: java.lang.reflect.InvocationTargetException
07-01 11:59:08.260: E/AndroidRuntime(5028): at java.lang.reflect.Method.invoke(Native Method)
07-01 11:59:08.260: E/AndroidRuntime(5028): at java.lang.reflect.Method.invoke(Method.java:372)
07-01 11:59:08.260: E/AndroidRuntime(5028): at android.view.View$1.onClick(View.java:4002)
07-01 11:59:08.260: E/AndroidRuntime(5028): ... 10 more
07-01 11:59:08.260: E/AndroidRuntime(5028): Caused by: java.lang.NoClassDefFoundError: com.linkedin.platform.APIHelper$3
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.linkedin.platform.APIHelper.buildRequest(APIHelper.java:87)
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.linkedin.platform.APIHelper.request(APIHelper.java:144)
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.linkedin.platform.APIHelper.getRequest(APIHelper.java:157)
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.techage.techsuite.LinkedInActivity.getProfile(LinkedInActivity.java:153)
07-01 11:59:08.260: E/AndroidRuntime(5028): at com.techage.techsuite.LinkedInActivity.postMessageMethod(LinkedInActivity.java:267)
07-01 11:59:08.260: E/AndroidRuntime(5028): ... 13 more
我还在这里附上了我的开发环境的一些屏幕截图:
搜索、挖掘和扫描整个互联网已经很多天了,但不幸的是,我仍然无法解决问题。请尽快帮助我。我将不胜感激。
谢谢
阿蒂什