连接到ports rest api时出现401错误

时间:2016-01-18 20:04:01

标签: android-volley linkedin-api

我正在尝试通过linkedin的rest api获取用户的电子邮件地址。我正在使用凌空的请求。但它显示401错误。谁能帮我解决这个问题。下面是代码。访问令牌用于r_basicprofile和r_emailaddress权限

private static final String PROFILE_URL = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address)";
private static final String OAUTH_ACCESS_TOKEN_PARAM ="oauth2_access_token";
private static final String QUESTION_MARK = "?";
private static final String EQUALS = "=";
private static final String HEADER_CONTENT_TYPE = "Content-Type";
private static final String HEADER_AUTHORIZATION = "Authorization";
private static final String HEADER_SRC = "x-li-src";
private static final String HEADER_LI_FORMAT = "x-li-format";
private static final String HEADER_LI_VER = "x-li-msdk-ver";
private static final String CONTENT_VALUE = "application/json";
private static final String HEADER_SRC_VALUE = "msdk";
private static final String HEADER_LI_FORMAT_VALUE = "json";

private TextView welcomeText;
private ProgressDialog pd;
String accessToken;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fflifind_friends);
    welcomeText = (TextView) findViewById(R.id.activity_profile_welcome_text);

    //Request basic profile of the user
    SharedPreferences preferences = this.getSharedPreferences("user_info", 0);
    accessToken = preferences.getString("accessToken", null);
    if(accessToken!=null){
        String profileUrl = getProfileUrl(accessToken);
        Log.d("profile url", profileUrl);
       // new GetProfileRequestAsyncTask().execute(profileUrl);
        doServer(profileUrl);
    }
}

private Map<String, String> getLiHeaders(String accessToken) {
    HashMap<String, String> headers = new HashMap<String, String>();
    headers.put(HEADER_CONTENT_TYPE, CONTENT_VALUE);
    headers.put(HEADER_AUTHORIZATION, "Bearer " + accessToken);
    headers.put(HEADER_SRC, HEADER_SRC_VALUE);
    headers.put(HEADER_LI_FORMAT, HEADER_LI_FORMAT_VALUE);
    //headers.put(HEADER_LI_VER, BuildConfig.MSDK_VERSION);
    return headers;
}
private static final String getProfileUrl(String accessToken){
    String url = PROFILE_URL
                + QUESTION_MARK
                + OAUTH_ACCESS_TOKEN_PARAM + EQUALS + accessToken;
        return url;

}

public void doServer(String url)
{
    final ProgressDialog dialog = ProgressDialog.show(this, null, "Loading data ");
    JsonObjectRequest jsObjRequest = new JsonObjectRequest
            (Request.Method.POST, url, null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    dialog.dismiss();
                    Log.d("Jsonres-", response.toString());
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    dialog.dismiss();
                    // TODO Auto-generated method stub
                    Log.d("error ","err");
                    Toast.makeText(getApplicationContext(), error.getLocalizedMessage(), Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            return getLiHeaders(accessToken);
        }
    };
    NetworkRequestQueue.getInstance(this).addToRequestQueue(jsObjRequest);
}

1 个答案:

答案 0 :(得分:0)

使用此方法获取linkedin帐户的个人资料信息,并在下面的 PROFILE_LINK 字符串提及的个人资料中定义您想要的内容,它对我来说很好用。希望它可以解决您的问题。

IntStream