2014-07-24 83 views
0

我想在android.as中顯示一個webview在asynctask中,我嘗試授權我的twitter應用程序。但是,當我點擊登錄按鈕時,它將我重定向到瀏覽器。所以,我想在我的activity上顯示一個webview。下面的代碼,但我的應用程序崩潰。 那麼,我該如何做到這一點?如何在Android的asynctask中顯示webview?

我的代碼登錄到Twitter帳戶 -

private class TwitterLoginTask extends AsyncTask<Void, Void, Void> { 

      @Override 
      protected Void doInBackground(Void... params) { 
      // Check if already logged in 
      if (!isTwitterLoggedInAlready()) { 
       ConfigurationBuilder builder = new ConfigurationBuilder(); 
       builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); 
       builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); 
       Configuration configuration = builder.build(); 

       TwitterFactory factory = new TwitterFactory(configuration); 
       twitter = factory.getInstance(); 

       try { 
        requestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL); 
        wv.loadUrl(requestToken.getAuthorizationURL()); 
        setContentView(wv); 

        setContentView(R.layout.activity_main); 
        wv.setWebViewClient(new WebViewClient()); 
        wv.loadUrl(requestToken.getAuthenticationURL()); 
        wv.getSettings().setJavaScriptEnabled(true); 

     //redirects to browser  
     //MainActivity.this.startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(requestToken.getAuthenticationURL()))); 

       } catch (TwitterException e) { 
        e.printStackTrace(); 
       } 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      if (isTwitterLoggedInAlready()) { 
       // User already logged into twitter 
       Toast.makeText(MainActivity.this, "Already Logged into Twitter",   Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

回答

0

嘗試通過登錄的結果給的AsyncTask的onPostExecute方法,並執行web視圖改變那裏。但是可以肯定的是,請發佈堆棧跟蹤。

+0

你沒注意到''setContentView(wv);'在'doInBackground()'中嗎?首要的是這個問題。 –

+0

這是正確的,先生。 – overbet13

+0

我設置了wv.setWebViewClient(新的WebViewClient()); wv.loadUrl(requestToken.getAuthenticationURL()); ()。setJavaScriptEnabled(true); setContentView(wv);在postExecute中刪除了setContentView(R.layout.activity_main);現在它的工作正常。但在webview中點擊「Authorize App」按鈕後,它會給出錯誤,因爲「標記null不適用於應用程序」,這意味着什麼? – user3851588

0

您只能在onCreate()中撥打setContentView(...);一次,您嘗試做的事情是不可能的。 WebView必須:

  • 成爲原始佈局的一部分。您可以將其可見性設置爲初始化,然後在需要時顯示它

  • 或者,您可以通過編程創建WebView,並在需要時將其添加到視圖層次結構中。

  • 或者您可以創建一個新的Activity,其中只包含WebView,並在需要顯示網站時將該URL傳遞給新的Activity

第一個和第三個選項是更好的選項。

相關問題