oauth2 android中的jsonresponse中的invalid_client

我正在为谷歌做oauth2我能够获得授权码但我无法从授权码获取accessstoken。

我得到了无效的json_response

{ "error":"invalid_client" } 

我已经尝试过更新应用程序的产品名称。 通过这个解决方案 但它没有帮助。

这是获取获取AccessToken的代码。 GetAccessToken

 public class GetAccessToken { static InputStream is = null; static JSONObject jObj = null; static String json = ""; public GetAccessToken() {} List  params = new ArrayList  (); Map  mapn; DefaultHttpClient httpClient; HttpPost httpPost; public JSONObject gettoken(String address, String token, String client_id, String client_secret, String redirect_uri, String grant_type) { // Making HTTP request try { // DefaultHttpClient httpClient = new DefaultHttpClient(); httpPost = new HttpPost(address); params.add(new BasicNameValuePair("code", token)); params.add(new BasicNameValuePair("client_id", client_id)); params.add(new BasicNameValuePair("client_secret", client_secret)); params.add(new BasicNameValuePair("redirect_uri", redirect_uri)); params.add(new BasicNameValuePair("grant_type", grant_type)); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded"); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); Log.e("JSONStr", json); } catch (Exception e) { e.getMessage(); Log.e("Buffer Error", "Error converting result " + e.toString()); } // Parse the String to a JSON Object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // Return JSON String return jObj; }} 

用于解析json_response的代码。

TokenGet.class

  private class TokenGet extends AsyncTask  { private ProgressDialog pDialog; String Code;@ Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(MainActivity.this); pDialog.setMessage("Contacting Google ..."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); Code = pref.getString("Code", ""); pDialog.show(); }@ Override protected JSONObject doInBackground(String...args) { GetAccessToken jParser = new GetAccessToken(); JSONObject json = jParser.gettoken(TOKEN_URL, authCode, CLIENT_ID, CLIENT_SECRET, REDIRECT_URI, GRANT_TYPE); return json; }@ Override protected void onPostExecute(JSONObject json) { pDialog.dismiss(); if (json != null) { try { String tok = json.getString("access_token"); String expire = json.getString("expires_in"); String refresh = json.getString("refresh_token"); Log.d("json", json.toString()); Log.d("Token Access", tok); Log.d("Expire", expire); Log.d("Refresh", refresh); auth.setText("Authenticated"); Access.setText("Access Token:" + tok + "\nExpires:" + expire + "\nRefresh Token:" + refresh); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show(); pDialog.dismiss(); } } } 

给我,任何建议……

好吧,我有一些像你使用AsyncTask的麻烦:

所以,我建议你使用VolleY,它很容易做你正在做的这个库…

我认为您的问题是您没有使用正确的Charset …尝试将其添加到您的代码中:

httpPost.setHeader(“Content-Type”,“application / x-www-form-urlencoded; charset = utf-8”);

如果它不起作用,请告诉我……

如果你有兴趣使用Volley让我知道….我不是专家,但我可以帮助你,实际上我正在使用它。