【问题标题】:OAuth1a retrieveRequestToken throw nullOAuth1a retrieveRequestToken throw null
【发布时间】:2014-01-30 02:22:17
【问题描述】:

我在 OAuth 签名方面遇到了一些问题。

在我希望获得retrieveRequestToken 时,我收到以下错误:

01-05 17:26:02.775: W/System.err(24358): oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: null

我不知道我为什么会得到这个。这里有什么建议吗?

我的代码:

connectionDec = new ConnectionDetector(getApplicationContext());

// Check if Internet present
if (!connectionDec.isConnectingToInternet())
{
// Internet Connection is not present
// alert.showAlertDialog(MainActivity.this,
// "Internet Connection Error",
// "Please connect to working Internet connection", false);
// stop executing code by return
return;
}

CommonsHttpOAuthConsumer consumer =
new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
CommonsHttpOAuthProvider provider =
new CommonsHttpOAuthProvider(REQUEST_TOKEN_URL, ACCESS_TOKEN_URL,
AUTHORIZE_URL);
provider.setOAuth10a(true);

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String token = sharedPreferences.getString("token", null);
String tokenSecret = sharedPreferences.getString("token_secret", null);

if (token == null || tokenSecret == null) 
{
Map requestHeaders = provider.getRequestHeaders();
requestHeaders.put("User-Agent", USER_AGENT);
requestHeaders.put("Accept-Encoding", "gzip");

try 
{
String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
}
catch (OAuthMessageSignerException e) 
{
e.printStackTrace();
}
catch (OAuthNotAuthorizedException e) 
{
e.printStackTrace();
}
catch (OAuthExpectationFailedException e) 
{
e.printStackTrace();
}
catch (OAuthCommunicationException e) 
{
e.printStackTrace();
}
}
else
{
}

任何提示和帮助...谢谢

PS:这是Discogs而不是Twitter

疯狂的问候

【问题讨论】:

    标签: android oauth


    【解决方案1】:

    好的,我自己已经回答了这个问题......我已经实现了一个如下所示的异步任务并且它可以工作:

    public class StartUpActivity extends Activity implements OnClickListener
    {
    
        private static String CONSUMER_KEY = "consumerkey";
        private static String CONSUMER_SECRET = "yourconsumersecret";
        private static String REQUEST_TOKEN_URL = "http://api.discogs.com/oauth/request_token";
        private static String AUTHORIZE_URL = "http://www.discogs.com/oauth/authorize";
        private static String ACCESS_TOKEN_URL = "http://api.discogs.com/oauth/access_token";
        private static String USER_AGENT = "youruseragent";
        private static String CALLBACK_URL = "http://www.callback.com";
    
        private ConnectionDetector connectionDec;
        private SharedPreferences sharedPreferences;
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.start_up_layout);
    
            connectionDec = new ConnectionDetector(getApplicationContext());
    
            // Check if Internet present
            if (!connectionDec.isConnectingToInternet())
            {
                // Internet Connection is not present
                // alert.showAlertDialog(MainActivity.this,
                // "Internet Connection Error",
                // "Please connect to working Internet connection", false);
                // stop executing code by return
                return;
            }
    
        }
    
        class ProgressTask extends AsyncTask<Integer, Integer, Void>{
    
            @Override
            protected void onPreExecute() {
                // initialize the progress bar
                // set maximum progress to 100.
            }
    
            @Override
            protected void onCancelled() {
                // stop the progress
            }
    
            @Override
            protected Void doInBackground(Integer... params) {
                // get the initial starting value
                int start=params[0];
                // increment the progress
                    try {
                        CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
                        CommonsHttpOAuthProvider provider =
                                new CommonsHttpOAuthProvider(REQUEST_TOKEN_URL, ACCESS_TOKEN_URL, AUTHORIZE_URL);
                        provider.setOAuth10a(true);
    
                        // Check if token and tokensecret are already stored at app preferences
                        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                        String token = sharedPreferences.getString("token", null);
                        String tokenSecret = sharedPreferences.getString("token_secret", null);
    
                        if (token == null || tokenSecret == null)
                        {
                            Map<String, String> requestHeaders = provider.getRequestHeaders();
                            requestHeaders.put("User-Agent", USER_AGENT);
                            requestHeaders.put("Accept-Encoding", "gzip");
    
                            try
                            {
                                String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
                                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
                            }
                            catch (OAuthMessageSignerException e)
                            {
                                e.printStackTrace();
                            }
                            catch (OAuthNotAuthorizedException e)
                            {
                                e.printStackTrace();
                            }
                            catch (OAuthExpectationFailedException e)
                            {
                                e.printStackTrace();
                            }
                            catch (OAuthCommunicationException e)
                            {
                                e.printStackTrace();
                            }
                        }
                        else
                        {
    
                        }
    
                        }
    
                     catch (Exception e) {
                    }
    
                return null;
            }
    
            @Override
            protected void onProgressUpdate(Integer... values) {
                // increment progress bar by progress value
            }
    
            @Override
            protected void onPostExecute(Void result) {
                // async task finished
            }
        } 
    }
    

    【讨论】:

    • 关于你如何做到这一点的更多细节不会有坏处。
    • 请添加您用于解决问题的重点示例代码,以便其他用户将来可以从中受益。
    猜你喜欢
    • 2012-01-22
    • 2019-08-01
    • 2019-10-30
    • 2017-12-16
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2018-12-21
    相关资源
    最近更新 更多