0

我正在尝试制作一个应用程序,我可以直接从我的应用程序在我的 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

我还在这里附上了我的开发环境的一些屏幕截图: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

搜索、挖掘和扫描整个互联网已经很多天了,但不幸的是,我仍然无法解决问题。请尽快帮助我。我将不胜感激。

谢谢

阿蒂什

4

0 回答 0