【问题标题】:Twitter Integration API is not workingTwitter 集成 API 不起作用
【发布时间】:2013-05-22 22:18:11
【问题描述】:

首先我已经下载了twitter4j-3.0.3 并将其.jar 文件放入我的eclipse 应用程序的libs 文件夹中。之后我在https://dev.twitter.com/ 上创建了一个应用程序并获取所有需要的凭据并将回调URL 提供为@987654327 @

现在我的代码如下

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 ...该按钮不起作用..需要帮助

}

谁能告诉我为什么我在Uri uri = getIntent().getData();...uri 对象值为 null..因此这部分没有执行

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());
            }
        }

【问题讨论】:

  • 谁能告诉我为什么我在 Uri uri = getIntent().getData(); 上得到空值;
  • 你是如何解决你的问题的。我得到了同样的错误@Kingshuk Deb
  • 不再作为安卓开发者工作,忘记了它是如何解决的......请谷歌它

标签: android android-layout twitter twitter-oauth


【解决方案1】:

查看此演示链接,您将了解它的工作原理,然后尝试实现自己的

你可以同时下载 您只需创建您的 Twitter 应用程序。博主也解释了这一点。按照他们,您将获得两个密钥。

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

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

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

First Example

Second Example

享受吧。!!!

【讨论】:

  • 请先阅读问题..我在那里提供了所有细节..我已经有了 consumer_key 和 consumer_secret ......
  • 点击该按钮后,它来到public void onLogInClicked(),在step over(button) 几行之后,它会用twitterException捕获部分
  • 不要在这里解释你的流程,我们从代码中知道,发布你的错误日志 cate
  • requestToken = twitter.getOAuthRequestToken(CALLBACK); 行之后进入捕获部分
  • 在 Eclipse 中看到 logcat 打开它并运行你的应用程序,这将显示错误并在此处发布。不是图片链接等
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 2012-03-08
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多