Twitter的整合API不工作

Twitter的整合API不工作

问题描述:

首先我已经下载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开发者工作,并忘记了它是如何解决的。请尝试谷歌它 –

看看这个演示的链接,你会得到的想法它是如何工作,然后尝试实现自己的

你可以下载两个 你必须只创建您的Twitter的应用程序。这也是由博主解释。追随他们你会得到两把钥匙。

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

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

替换您的活动并运行您的项目。

First Example

Second Example

享受。!!!

+0

plz先阅读问题..我给出了所有的细节..我已经有consumer_key和consumer_secret两个.. –

+0

你隐藏你的密钥,发布你的错误日志猫 –

+0

点击后按钮来到''公共无效onLogInClicked()'和'步骤结束'(按钮)几行后,去catch部分与twitterException –