2017-09-25 38 views
0

我能够遵循oauth跳舞到最后一步: 我有一个请求令牌,并且一个oauth验证者会发送回我的A​​ndroid应用用户在浏览器中验证应用程序后。不幸的是,我无法获得最终访问令牌。这就是我在这最后一步所要做的:使用scribejava请求访问令牌时出现http连接错误oauth1.0a使用scribejava

// use the parameter your API exposes for the verifier 
String oauthVerifier = uri.getQueryParameter("oauth_verifier"); 

// get requestToken from shared preferences 
SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
OAuth1RequestToken requestToken = new OAuth1RequestToken(
     sharedPref.getString("WP_OAuthToken",""), 
     // sharedPref.getString("WP_OAuthTokenSecret","") 
     oauthVerifier 
); 

// request accessToken from API 
OAuth1AccessToken accessToken = null; 
try { 
    accessToken = service.getAccessToken(requestToken, oauthVerifier); 
} ... 

最后一行在这里不起作用。 logcat告诉我

Caused by: android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303) 
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86) 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74) 
at java.net.InetAddress.getAllByName(InetAddress.java:752) 
at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187) 
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156) 
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98) 
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345) 
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328) 
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126) 
at com.github.scribejava.core.httpclient.jdk.JDKHttpClient.doExecute(JDKHttpClient.java:104) 
at com.github.scribejava.core.httpclient.jdk.JDKHttpClient.execute(JDKHttpClient.java:72) 
at com.github.scribejava.core.oauth.OAuthService.execute(OAuthService.java:104) 
at com.github.scribejava.core.oauth.OAuth10aService.getAccessToken(OAuth10aService.java:99) 
at com.example.******.*********.LoginActivity.onResume(LoginActivity.java:132) 

其中.LoginActivity.onResume(LoginActivity.java:132)是上面代码中的最后一行。在JDKHttpClient.java的第104行中,试图在final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection();上运行connection.connect();。当我尝试调试错误时,这是​​我的应用程序崩溃的地方。调试输出是类似的

this = {[email protected]} 
userAgent = null 
headers = {[email protected]} size = 1 
0 = {[email protected]} "Authorization" -> "OAuth oauth_consumer_key="pxKsS2wdw4uvPPR", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_timestamp="1506338204", oauth_nonce="292945226", oauth_verifier="DrZUpDOsdTN3nOUcP0ZIEsclBYx6", oauth_token="weCu9ejOkmOX9D4zB9zL62XESpe23Q", oauth_signature="%2B%2FV%2FwkmFFaFfmb%2Fc%3D"" 
httpVerb = {[email protected]} "POST" 
completeUrl = "http://***wordpresspage***.de/oauth1/access" 
bodyType = {[email protected]} "BYTE_ARRAY" 
bodyContents = {byte[0]@4926} 
connection = {[email protected]} "com.android.okhttp.internal.huc.HttpURLConnectionImpl:http://***wordpresspage***.de/oauth1/access" 
client = {[email protected]} 
fixedContentLength = -1 
followUpCount = 0 
handshake = null 
httpEngine = null 
httpEngineFailure = null 
requestHeaders = {[email protected]} 
    namesAndValues = {[email protected]} size = 6 
    0 = "Authorization" 
    1 = "OAuth oauth_consumer_key="pxKsS2wdw4uvPPR", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_timestamp="1506338204", oauth_nonce="292945226", oauth_verifier="DrZUpDOsdTN3nOUcP0ZIEsclBYx6", oauth_token="weCu9ejOkmOX9D4zB9zL62XESpe23Q", oauth_signature="%2B%2FV%2FwkmFFaFfmb%2Fc%3D"" 
    2 = "Content-Length" 
    3 = "0" 
    4 = "Content-Type" 
    5 = "application/x-www-form-urlencoded" 
    shadow$_klass_ = {[email protected]} "class com.android.okhttp.Headers$Builder" 
    shadow$_monitor_ = -1963988711 
responseHeaders = null 
route = null 
urlFilter = {[email protected]} 
chunkLength = -1 
HttpURLConnection.fixedContentLength = -1 
fixedContentLengthLong = -1 
instanceFollowRedirects = true 
method = "POST" 
responseCode = -1 
responseMessage = null 
allowUserInteraction = false 
connectTimeout = 0 
connected = false 
doInput = true 
doOutput = false 
ifModifiedSince = 0 
readTimeout = 0 
requests = null 
url = {[email protected]} "http://***wordpresspage***.de/oauth1/access" 
    authority = "***wordpresspage***.de" 
    file = "/oauth1/access" 
    handler = {[email protected]} 
    hashCode = -1 
    host = "***wordpresspage***.de" 
    hostAddress = null 
    path = "/oauth1/access" 
    port = -1 
    protocol = "http" 
    query = null 
    ref = null 
    userInfo = null 
    shadow$_klass_ = {[email protected]} "class java.net.URL" 
    shadow$_monitor_ = -2041726017 
useCaches = true 
shadow$_klass_ = {[email protected]} "class com.android.okhttp.internal.huc.HttpURLConnectionImpl" 
shadow$_monitor_ = -1950688533 

我只是稍微改变了凭据,因为我不希望我的网站发布凭据。

我期望上面的连接是成功的,此外还要为我的wordpress API返回访问令牌。当我在Postman中发送相同凭证时,请求成功。那么当我使用scribejava时,问题出在哪里? 是否因为scribejava在请求头中发送了oauth_verifier,并且在Postman中可以将它作为url参数发送?

回答

0

根据日志:

Caused by: android.os.NetworkOnMainThreadException 

调用主线程上的服务API方法,尝试使用的AsyncTask来处理网络请求。

+0

天哪..谢谢你的快速回复! 现在它工作.. –

相关问题