2011-06-03 105 views
3

我正在使用Twitter4J發佈到Twitter,但你必須打開瀏覽器,並從Twitter獲得一個針我的應用程序能夠做到這一點,這有效,但當我回到我的應用程序,活動超時並關閉本身。有沒有辦法讓我的活動開放? Web視圖不起作用,因爲Twitter不允許您使用常規路徑進行授權。我可以重寫Android上的autotimeout嗎?

public void TwitterSend() { 
    // The factory instance is re-useable and thread safe. 
    Twitter twitter = new TwitterFactory().getInstance(); 
    twitter.setOAuthConsumer(consumer_token, consumer_secret); 

    //WebView webview = (WebView) findViewById(R.id.webview); 
    //webview.setVisibility(View.VISIBLE); 
    //ScrollView sc = (ScrollView) findViewById(R.id.scrollView1); 
    //sc.setVisibility(View.VISIBLE); 
    EditText edit = (EditText) findViewById(R.id.editText1); 
    edit.setVisibility(View.VISIBLE); 
    RequestToken requestToken = null; 
    try { 
     requestToken = twitter.getOAuthRequestToken(); 
     System.out.println(requestToken.toString()); 
    } catch (TwitterException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    AccessToken accessToken = null; 

    //webview.loadUrl("https://api.twitter.com/oauth/authorize"); 
    Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse(requestToken.getAuthorizationURL())); 
    browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(browserIntent); 


     System.out.println("Open the following URL and grant access to your account:"); 

     System.out.print("Enter the PIN(if aviailable) or just hit enter.[PIN]:"); 
     String pin = edit.getText().toString(); 
    CountDownTimer timer = new CountDownTimer(900000, 1000) { 

     public void onTick(long millisUntilFinished) { 
     } 


     public void onFinish() { 

     } 
    }; 
    timer.start(); 
     while(pin.length()<7) 
     { 
      pin = edit.getText().toString(); 
     } 
     System.out.print(pin); 
     try{ 
     if(pin.length() > 0){ 
      accessToken = twitter.getOAuthAccessToken(requestToken, pin); 
     }else{ 
      accessToken = twitter.getOAuthAccessToken(); 
     } 
     } catch (TwitterException te) { 
     if(401 == te.getStatusCode()){ 
      System.out.println("Unable to get the access token."); 
      edit.setVisibility(View.GONE); 
     }else{ 
      te.printStackTrace(); 
     } 
     } 

    //persist to the accessToken for future reference. 
    Status status = null; 
    try { 

     SharedPreferences stats = getSharedPreferences(PREFS_NAME, 0); 
     String quote = stats.getString("shareQuote", "An error has occured. We are Sorry."); 
     status = twitter.updateStatus(quote); 
    } catch (TwitterException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     //webview.setVisibility(View.GONE); 
     //edit.setVisibility(View.GONE); 
    } 
    Toast.makeText(getApplicationContext(), "Successfully updated the status to [" + status.getText() + "].", Toast.LENGTH_LONG).show(); 
    System.out.println("Successfully updated the status to [" + status.getText() + "]."); 
    // webview.setVisibility(View.GONE); 
    edit.setVisibility(View.GONE); 
    //sc.setVisibility(View.GONE); 
    /*WebView webview = (WebView) findViewById(R.id.webview); 
    webview.setVisibility(View.VISIBLE); 
    Twitter twitter=new TwitterFactory().getInstance(); 
    twitter.setOAuthConsumer(consumer_token, consumer_secret); 
    AccessToken a = new AccessToken(oauth_token, oauth_token_secret); 
    twitter.setOAuthAccessToken(a); 
    try { 
     RequestToken requestToken = twitter.getOAuthRequestToken("https://api.twitter.com/oauth/request_token"); 
     webview.loadUrl("https://api.twitter.com/oauth/authorize"); 
    } catch (TwitterException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }*/ 

} 
+1

是真的有必要嗎?儘量只發布相關的片段,以便我們能更好地理解你。 – mre 2011-06-03 03:21:07

回答

1

它通常是在Android的一個壞主意,試圖迫使活動繼續開放 - 對付被破壞活動的最佳方式是確保你正確地處理所有的活動生命週期回調的。此頁面有幫助:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

如果您正確保存活動的狀態,則不應該讓系統停止它。

+0

我最終編寫了一項工作。這次真是萬分感謝。它確實幫助我瞭解活動的工作方式。 – Robin 2011-06-18 02:30:19

相關問題