我一直在使用下面的教程來製作一個基本的Twitter客戶端,而我所要做的就是讓OAuth工作。它將我帶到同意頁面,但在點擊「接受」後,它不會將我重定向回我的應用程序。這裏是我的代碼:WebView Twitter OAuth回調不起作用
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
requestToken = twitter
.getOAuthRequestToken(TWITTER_CALLBACK_URL);
Test.this.startActivity(new Intent(Intent.ACTION_VIEW, Uri
.parse(requestToken.getAuthenticationURL())));
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
我試着改變TWITTER_CALLBACK_URL的值,但是沒有幫助。我遵循一個建議來製作一個WebView而不是啓動瀏覽器,但這也不起作用,因爲我得到一個錯誤,說「所有WebView方法都必須在同一個線程上調用」。
我試圖調用該方法在UI線程,就像這樣:
final WebView wv = (WebView) findViewById(R.id.wv);
mAppActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
requestToken = twitter
.getOAuthRequestToken(TWITTER_CALLBACK_URL);
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
wv.loadUrl(requestToken.getAuthorizationURL());
return true;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
但是,這引起了NetworkOnMainThreadException。我也試圖實現一個異步任務,如下圖所示,但絕對沒有發生在我點擊了哪個叫這是其中一個片段,甚至沒有任何異常的方法按鈕:
private class LoadURLAsync extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
WebView wv = (WebView) findViewById(R.id.wv);
wv.loadUrl(urls[0]);
return null;
}
}
try {
// get the access token
mAppActivity.this.accessToken =
twitter.getOAuthAccessToken(
requestToken, verifier);
LoadURLAsync task = new LoadURLAsync();
task.execute(new String[] {requestToken.getAuthorizationURL()});
} catch (Exception e) {
e.printStackTrace();
}
我已經看過了下面的答案,但他們仍然無法弄清楚如何從瀏覽器回到應用程序,或獲得WebView的工作方式。如果任何人有解決這些問題的任何一個,那會很好,謝謝!
WebView Twitter login window on UI thread How to fix android.os.NetworkOnMainThreadException? OAuth + Twitter on Android: Callback fails