private void getOAuthToken() { /* Android users: Do NOT use the DefaultOAuth* implementations on Android, since there's a bug in Android's java.net.HttpURLConnection that keeps it from working with some service providers. Instead, use the CommonsHttpOAuth* classes, since they are meant to be used with Apache Commons HTTP (that's what Android uses for HTTP anyway). */ // fatsecret_consumer_key = REST API Consumer Key, fatsecret_consumer_secret = REST API Shared // Secret final OAuthConsumer consumer = new CommonsHttpOAuthConsumer( getString(R.string.fatsecret_consumer_key), getString(R.string.fatsecret_consumer_secret)); consumer.setMessageSigner(new HmacSha1MessageSigner()); consumer.setSigningStrategy(new QueryStringSigningStrategy()); HttpParameters requestTokenRequestParams = new HttpParameters(); requestTokenRequestParams.put("oauth_callback", OAuth.OUT_OF_BAND); consumer.setAdditionalParameters(requestTokenRequestParams); try { String signedRequestTokenRequestUrl = consumer.sign("http://www.fatsecret.com/oauth/request_token"); Log.d(TAG, "Signed request_token URL = " + signedRequestTokenRequestUrl); HttpURLConnection requestTokenUrlConnection = (HttpURLConnection) new URL(signedRequestTokenRequestUrl).openConnection(); HttpParameters requestTokenResponseParams = OAuth.decodeForm(requestTokenUrlConnection.getInputStream()); final String requestToken = requestTokenResponseParams.getFirst(OAuth.OAUTH_TOKEN); final String requestSecret = requestTokenResponseParams.getFirst(OAuth.OAUTH_TOKEN_SECRET); Log.d(TAG, "Request token = " + requestToken); Log.d(TAG, "Token secret = " + requestSecret); final String authorizeUrl = "http://www.fatsecret.com/oauth/authorize?oauth_token=" + requestToken; Log.d(TAG, "Authorize URL = " + authorizeUrl); runOnUiThread( new Runnable() { @Override public void run() { final Dialog authDialog = new Dialog(LoginActivity_FatSecret.this); authDialog.setContentView(R.layout.auth_dialog); WebView web = (WebView) authDialog.findViewById(R.id.webv); web.getSettings().setJavaScriptEnabled(true); web.loadUrl(authorizeUrl); web.setWebViewClient( new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); Log.d(TAG, "URL = " + url); if (url.contains("postVerify")) { Uri uri = Uri.parse(url); final String verifyCode = uri.getQueryParameter("postVerify"); Log.i(TAG, "VERIFY : " + verifyCode); authDialog.dismiss(); runOnUiThread( new Runnable() { @Override public void run() { final ProgressDialog progressDialog = new ProgressDialog(LoginActivity_FatSecret.this); progressDialog.setIndeterminate(true); progressDialog.setMessage("Fetching access token..."); progressDialog.show(); new Thread( new Runnable() { @Override public void run() { consumer.getRequestParameters().clear(); HttpParameters authTokenRequestParams = new HttpParameters(); authTokenRequestParams.put("oauth_token", requestToken); authTokenRequestParams.put( "oauth_verifier", verifyCode); consumer.setAdditionalParameters( authTokenRequestParams); consumer.setTokenWithSecret( requestToken, requestSecret); try { String signedAccessTokenUrl = consumer.sign( "http://www.fatsecret.com/oauth/access_token"); Log.d( TAG, "Signed access_token URL = " + signedAccessTokenUrl); HttpURLConnection accessTokenUrlConnection = (HttpURLConnection) new URL(signedAccessTokenUrl) .openConnection(); HttpParameters accessTokenResponseParams = OAuth.decodeForm( accessTokenUrlConnection.getInputStream()); String token = accessTokenResponseParams.getFirst( OAuth.OAUTH_TOKEN); String secret = accessTokenResponseParams.getFirst( OAuth.OAUTH_TOKEN_SECRET); prefs .edit() .putString( FatSecretUtils.OAUTH_ACCESS_TOKEN_KEY, token) .putString( FatSecretUtils.OAUTH_ACCESS_SECRET_KEY, secret) .apply(); Intent home = new Intent( LoginActivity_FatSecret.this, SearchFood.class); startActivity(home); finish(); } catch (OAuthMessageSignerException e) { e.printStackTrace(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); } catch (OAuthCommunicationException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { runOnUiThread( new Runnable() { @Override public void run() { loginButton.setEnabled(true); progressDialog.dismiss(); } }); } } }) .start(); } }); } else if (url.contains("error")) { Log.i(TAG, "authorize error"); Toast.makeText(getApplicationContext(), "Error Occured", Toast.LENGTH_SHORT) .show(); runOnUiThread( new Runnable() { @Override public void run() { loginButton.setEnabled(true); authDialog.dismiss(); } }); } } }); authDialog.setTitle("Authorize FatSecret"); authDialog.setCancelable(true); authDialog.show(); } }); } catch (MalformedURLException e) { e.printStackTrace(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); } catch (OAuthCommunicationException e) { e.printStackTrace(); } catch (OAuthMessageSignerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }