2013-05-22 65 views
1

首先我已經下載twitter4j-3.0.3,並把它.jar文件,到我上https://dev.twitter.com/創建一個應用程序,並得到所有的證書需要我的日食app.After的libs文件夾,並給了回調URL爲https://google.co.inTwitter的整合API不工作

現在我的代碼如下

import twitter4j.Twitter; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.User; 
import twitter4j.auth.AccessToken; 
import twitter4j.auth.RequestToken; 
import twitter4j.conf.Configuration; 
import twitter4j.conf.ConfigurationBuilder; 
import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class TwitterSampleActivity extends Activity { 

    private static final String CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxx"; 
    private static final String CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxx"; 
    private static final String CALLBACK = "https://google.co.in"; 
    private String OAuthToken; 
    private String OAuthSecret; 
    private boolean isLogged; 
    private static Twitter twitter; 
    private static RequestToken requestToken; 

    private Button loginButton; 
    private Button logoutButton; 
    private Button sendStatus; 
    private EditText status; 
    private TextView userName; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_twitter); 

     loginButton = (Button) findViewById(R.id.twitter_log_in); 
     logoutButton = (Button) findViewById(R.id.twitter_log_out); 
     sendStatus = (Button) findViewById(R.id.twitter_send); 
     status = (EditText) findViewById(R.id.twitter_text); 
     userName = (TextView) findViewById(R.id.twitter_username); 

     loginButton.setVisibility(View.VISIBLE); 
     userName.setVisibility(View.GONE); 
     sendStatus.setVisibility(View.GONE); 
     status.setVisibility(View.GONE); 
     logoutButton.setVisibility(View.GONE); 

     Uri uri = getIntent().getData(); 
     if(uri!=null && uri.toString().startsWith(CALLBACK)) { 
      String verifier = uri.getQueryParameter("oauth_verifier"); 

      try { 
       AccessToken token = twitter.getOAuthAccessToken(requestToken, verifier); 

       OAuthToken = token.getToken(); 
       OAuthSecret = token.getTokenSecret(); 
       isLogged = true; 

       loginButton.setVisibility(View.GONE); 
       userName.setVisibility(View.VISIBLE); 
       sendStatus.setVisibility(View.VISIBLE); 
       status.setVisibility(View.VISIBLE); 
       logoutButton.setVisibility(View.VISIBLE); 

       User user = twitter.showUser(token.getUserId()); 
       String username = user.getName(); 

       userName.setText("Logged as: " + username); 
      } catch (Exception e) { 
       Log.e("Login error: ", e.getMessage()); 
      } 
     } 
    } 

    public void onLogInClicked(View v) { 
     if(!isLogged) { 
      ConfigurationBuilder builder = new ConfigurationBuilder(); 
      builder.setOAuthConsumerKey(CONSUMER_KEY); 
      builder.setOAuthConsumerSecret(CONSUMER_SECRET); 
      Configuration config = builder.build(); 
      TwitterFactory factory = new TwitterFactory(config); 
      twitter = factory.getInstance(); 

      try { 
       requestToken = twitter.getOAuthRequestToken(CALLBACK); 
       this.startActivity(new Intent(Intent.ACTION_VIEW, 
         Uri.parse(requestToken.getAuthenticationURL()))); 
      } catch (TwitterException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Toast.makeText(this, "Already logged", Toast.LENGTH_LONG).show(); 
     } 
    } 

    public void onLogOutclicked(View v) { 
     OAuthToken = ""; 
     OAuthSecret = ""; 
     isLogged = false; 

     loginButton.setVisibility(View.VISIBLE); 
     userName.setVisibility(View.GONE); 
     userName.setText(""); 
     sendStatus.setVisibility(View.GONE); 
     status.setVisibility(View.GONE); 
     logoutButton.setVisibility(View.GONE); 
    } 


    public void onSendClicked(View v) { 
     String text = status.getText().toString(); 
     if(text.length()>0) { 
      new SendTwitterStatusUpdate(this, CONSUMER_KEY, CONSUMER_SECRET, 
       OAuthToken, OAuthSecret).execute(text); 
     } else { 
      Toast.makeText(this, "Enter some text" , Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

和我activity_twitter.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/twitter_log_in" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="twitter log in" 
     android:onClick="onLogInClicked" /> 

    <TextView 
     android:id="@+id/twitter_username" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <EditText 
     android:id="@+id/twitter_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="text" /> 

    <Button 
     android:id="@+id/twitter_send" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="twitter send" 
     android:onClick="onSendClicked" /> 

    <Button 
     android:id="@+id/twitter_log_out" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="twitter log_out" 
     android:onClick="onLogOutClicked" /> 

</LinearLayout> 

SendTwitterStatusUpdate.java文件

import twitter4j.Twitter; 
import twitter4j.TwitterFactory; 
import twitter4j.auth.AccessToken; 
import twitter4j.conf.ConfigurationBuilder; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.widget.Toast; 

public class SendTwitterStatusUpdate extends AsyncTask<String, Void, Boolean>{ 

    private Context context; 
    private String consumerKey; 
    private String consumerSecret; 
    private String accessToken; 
    private String accessTokenSecret; 

    public SendTwitterStatusUpdate(Context context, String consumerKey, String consumerSecret, String accessToken,String accessTokenSecret) { 
     this.context=context; 
     this.consumerKey=consumerKey; 
     this.consumerSecret=consumerSecret; 
     this.accessToken=accessToken; 
     this.accessTokenSecret=accessTokenSecret; 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     String status = params[0]; 

     if(status!=null) { 
      try { 
       ConfigurationBuilder builder = new ConfigurationBuilder(); 
       builder.setOAuthConsumerKey(consumerKey); 
       builder.setOAuthConsumerSecret(consumerSecret); 

       AccessToken token = new AccessToken(accessToken, accessTokenSecret); 
       Twitter twitter = new TwitterFactory(builder.build()).getInstance(token); 

       twitter.updateStatus(status); 
       return true; 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return false; 
    } 

    @Override 
    public void onPostExecute(Boolean result) { 
     if(result) { 
      Toast.makeText(context, "Status successfully updated", Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(context, "Status not updated", Toast.LENGTH_LONG).show(); 
     } 
    } 

現在,當我跑我的應用程序,當我點擊該按鈕twitter log in我得到這個窗口 see the emulator which does not showing the full <code>twitter_activity.xml</code>

而且除了那個......那個按鈕不起作用。 。需要幫助

}

誰能告訴我爲什麼我的Uri uri = getIntent().getData();越來越空... URI對象值爲NU ll..thus這部分沒有執行

if(uri!=null && uri.toString().startsWith(CALLBACK)) { 
      String verifier = uri.getQueryParameter("oauth_verifier"); 

      try { 
       AccessToken token = twitter.getOAuthAccessToken(requestToken, verifier); 

       OAuthToken = token.getToken(); 
       OAuthSecret = token.getTokenSecret(); 
       isLogged = true; 

       loginButton.setVisibility(View.GONE); 
       userName.setVisibility(View.VISIBLE); 
       sendStatus.setVisibility(View.VISIBLE); 
       status.setVisibility(View.VISIBLE); 
       logoutButton.setVisibility(View.VISIBLE); 

       User user = twitter.showUser(token.getUserId()); 
       String username = user.getName(); 

       userName.setText("Logged as: " + username); 
      } catch (Exception e) { 
       Log.e("Login error: ", e.getMessage()); 
      } 
     } 
+0

誰能告訴我爲什麼我在Uri上得到null uri = getIntent()。getData(); –

+0

你是如何解決你的問題的。我得到了同樣的錯誤@Kingshuk Deb – mominapk

+0

不再作爲Android開發者工作,並忘記了它是如何解決的。請嘗試谷歌它 –

回答

0

看看這個演示的鏈接,你會得到的想法它是如何工作,然後嘗試實現自己的

你可以下載兩個 你必須只創建您的Twitter的應用程序。這也是由博主解釋。追隨他們你會得到兩把鑰匙。

TWITTER_CONSUMER_KEY="**********************"; 

TWITTER_CONSUMER_SECRET="********************"; 

替換您的活動並運行您的項目。

First Example

Second Example

享受。!!!

+0

plz先閱讀問題..我給出了所有的細節..我已經有consumer_key和consumer_secret兩個.. –

+0

你隱藏你的密鑰,發佈你的錯誤日誌貓 –

+0

點擊後按鈕來到''公共無效onLogInClicked()'和'步驟結束'(按鈕)幾行後,去catch部分與twitterException –