2014-07-24 3 views
0

안드로이드에서 asynctask로 웹보기를 보여주고 싶습니다. 내 트위터 응용 프로그램을 인증하려고합니다. 그러나 로그인 버튼을 클릭하면 브라우저로 리디렉션됩니다. 그래서, 내 활동에 대한 웹뷰를 보여주고 싶습니다. 다음 코드는 있지만 응용 프로그램이 손상됩니다. 그래서 어떻게 할 수 있습니까? 트위터 계정으로 로그인에 대한android의 asynctask에서 webview를 표시하는 방법은 무엇입니까?

내 코드 -

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 방법에 로그인의 결과를 전달하고, 웹보기가 변경 실행합니다. 하지만 확실하게 스택 추적을 게시하십시오.

+0

doInBackground()에서'setContentView (wv);'를 보지 못하셨습니까? 무엇보다 먼저 그것이 문제입니다. –

+0

맞습니다. – overbet13

+0

wv.setWebViewClient (새 WebViewClient());를 설정했습니다. wv.loadUrl (requestToken.getAuthenticationURL()); wv.getSettings(). setJavaScriptEnabled (true); setContentView (wv); postExecute에서 제거하고 setContentView (R.layout.activity_main)를 제거했습니다. 지금은 잘 작동합니다. 하지만 webview에서 "응용 프로그램 권한 부여"버튼을 클릭하면 "token null은 응용 프로그램이 아닙니다"라는 오류 메시지가 나타납니다. 그게 무슨 뜻입니까? – user3851588

0

onCreate()에서 한 번만 setContentView(...);으로 전화 할 수는 없습니다. WebView은 다음을 가져야합니다.

  • 원래 레이아웃의 일부분이어야합니다. 시각적으로 초기 상태로 설정 한 다음 필요시 표시 할 수 있습니다.

  • 또는 프로그래밍 방식으로 WebView을 만들고 필요할 때마다보기 계층 구조에 추가 할 수 있습니다.

  • 또는 WebView 만 포함 된 새 Activity을 만들고 웹 사이트를 표시 할 때 새 Activity에 URL을 전달할 수 있습니다.

제 1 및 제 3 옵션이 바람직하다.

관련 문제