2014-02-23 63 views
0

我一直在使用下面的教程來製作一個基本的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

回答

0

顯然,URL必須是完全一樣了android:主機和android:計劃參數的清單,結合在一起。例如:

<data 
     android:host="x-oauthflow-twitter" 
     android:scheme="callback" /> 

static final String TWITTER_CALLBACK_URL = "callback://x-oauthflow-twitter";