Twitter的集成API不工作 [英] Twitter Integration API is not working

查看:149
本文介绍了Twitter的集成API不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我已经下载 twitter4j-3.0.3 键,把它的的.jar 文件到库文件夹,我创建 https://dev.twitter.com/ ,并得到所有的凭据需要并给回调URL为 https://google.co.in

现在我的code是如下:

 进口twitter4j.Twitter;
进口twitter4j.TwitterException;
进口twitter4j.TwitterFactory;
进口twitter4j.User;
进口twitter4j.auth.AccessToken;
进口twitter4j.auth.RequestToken;
进口twitter4j.conf.Configuration;
进口twitter4j.conf.ConfigurationBuilder;
进口android.app.Activity;
进口android.content.Intent;
进口android.net.Uri;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.TextView;
进口android.widget.Toast;公共类TwitterSampleActivity延伸活动{    私有静态最后弦乐CONSUMER_KEY =xxxxxxxxxxxxxxxxxxxxxxxxx;
    私有静态最后弦乐CONSUMER_SECRET =xxxxxxxxxxxxxxxxxxx;
    私有静态最后弦乐回调=htt​​ps://google.co.in;
    私人字符串OAuthToken;
    私人字符串OAuthSecret;
    私人布尔isLogged;
    私有静态Twitter的微博;
    私有静态RequestToken requestToken;    私人按钮loginButton;
    私人按钮logoutButton;
    私人按钮sendStatus;
    私人的EditText状态;
    私人TextView的用户名;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_twitter);        loginButton =(按钮)findViewById(R.id.twitter_log_in);
        logoutButton =(按钮)findViewById(R.id.twitter_log_out);
        sendStatus =(按钮)findViewById(R.id.twitter_send);
        状态=(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();
        如果(URI = NULL&放大器;!&安培; uri.toString()startsWith(回调)){
            串验证= uri.getQueryParameter(oauth_verifier);            尝试{
                的accessToken令牌= twitter.getOAuthAccessToken(requestToken,验证);                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);                用户的用户= twitter.showUser(token.getUserId());
                字符串username = user.getName();                userName.setText(登录为:+用户名);
            }赶上(例外五){
                Log.e(登录错误:e.getMessage());
            }
        }
    }    公共无效onLogInClicked(视图v){
        如果(!isLogged){
            ConfigurationBuilder建设者=新ConfigurationBuilder();
            builder.setOAuthConsumerKey(CONSUMER_KEY);
            builder.setOAuthConsumerSecret(CONSUMER_SECRET);
            配置配置= builder.build();
            TwitterFactory厂=新TwitterFactory(配置);
            叽叽喳喳= factory.getInstance();            尝试{
                requestToken = twitter.getOAuthRequestToken(回调);
                this.startActivity(新意图(Intent.ACTION_VIEW,
                        Uri.parse(requestToken.getAuthenticationURL())));
            }赶上(TwitterException E){
                e.printStackTrace();
            }
        }其他{
            Toast.makeText(这一点,已经登录,Toast.LENGTH_LONG).show();
        }
    }    公共无效onLogOutclicked(视图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);
    }
    公共无效onSendClicked(视图v){
        字符串文本= status.getText()的toString()。
        如果(text.length()大于0){
           新SendTwitterStatusUpdate(这一点,CONSUMER_KEY,CONSUMER_SECRET,
               OAuthToken,OAuthSecret).execute(文本);
        }其他{
            Toast.makeText(这一点,输入一些文字,Toast.LENGTH_SHORT).show();
        }
    }}

和我的 activity_twitter.xml 文件

 <?XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>    <按钮
        机器人:ID =@ + ID / twitter_log_in
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=微博日志
        安卓的onClick =onLogInClicked/>    <的TextView
        机器人:ID =@ + ID / TWITTER_USERNAME
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT/>    <的EditText
        机器人:ID =@ + ID / twitter_text
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        安卓的inputType =TEXT/>    <按钮
        机器人:ID =@ + ID / twitter_send
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=微博派
        安卓的onClick =onSendClicked/>    <按钮
        机器人:ID =@ + ID / twitter_log_out
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=叽叽喳喳log_out
        安卓的onClick =onLogOutClicked/>< / LinearLayout中>

SendTwitterStatusUpdate.java 文件

 进口twitter4j.Twitter;
进口twitter4j.TwitterFactory;
进口twitter4j.auth.AccessToken;
进口twitter4j.conf.ConfigurationBuilder;
进口android.content.Context;
进口android.os.AsyncTask;
进口android.widget.Toast;公共类SendTwitterStatusUpdate扩展的AsyncTask<弦乐,太虚,布尔> {    私人上下文的背景下;
    私人字符串consumerKey;
    私人字符串consumerSecret;
    私人字符串的accessToken;
    私人字符串accessTokenSecret;    公共SendTwitterStatusUpdate(上下文的背景下,字符串consumerKey,字符串consumerSecret,字符串的accessToken,字符串accessTokenSecret){
        this.context =背景;
        this.consumerKey = consumerKey;
        this.consumerSecret = consumerSecret;
        this.accessToken =的accessToken;
        this.accessTokenSecret = accessTokenSecret;
    }    @覆盖
    保护布尔doInBackground(字符串... PARAMS){
        字符串状态=参数[0];        如果(状态!= NULL){
            尝试{
                ConfigurationBuilder建设者=新ConfigurationBuilder();
                builder.setOAuthConsumerKey(consumerKey);
                builder.setOAuthConsumerSecret(consumerSecret);                的accessToken令牌=新的accessToken(的accessToken,accessTokenSecret);
                叽叽喳喳叽叽喳喳=新TwitterFactory(builder.build())的getInstance(标记)。                twitter.updateStatus(状态);
                返回true;
            }赶上(例外五){
                e.printStackTrace();
            }
        }
        返回false;
    }    @覆盖
    公共无效onPostExecute(布尔结果){
        如果(结果){
            Toast.makeText(背景下,状态更新成功,Toast.LENGTH_LONG).show();
        }其他{
            Toast.makeText(上下文,状态未更新,Toast.LENGTH_LONG).show();
        }
    }

现在,当我运行我的应用程序我得到这个窗口

和除此之外,当我点击该按钮微博登录 ...那个按钮是不是working..need帮助​​

}

谁能告诉我为什么我在开放的URI = getIntent()获取空的getData(); ... URI对象值null..thus这部分不执行

 如果(URI = NULL&放大器;!&安培; uri.toString()startsWith(回调)){
            串验证= uri.getQueryParameter(oauth_verifier);            尝试{
                的accessToken令牌= twitter.getOAuthAccessToken(requestToken,验证);                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);                用户的用户= twitter.showUser(token.getUserId());
                字符串username = user.getName();                userName.setText(登录为:+用户名);
            }赶上(例外五){
                Log.e(登录错误:e.getMessage());
            }
        }


解决方案

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

您可以下载两个
你只需创建你的Twitter app.That也被blogger.Follow解释它们,你会得到两把钥匙。

  TWITTER_CONSUMER_KEY =************TWITTER_CONSUMER_SECRET =******;

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

第一例

第二个例子

享受。!!!

First i have downloaded twitter4j-3.0.3 and put its .jar files into libs folder of my eclipse app.After that i create an app on https://dev.twitter.com/ and get all the credentials needed and gave callback url as https://google.co.in

Now my code is as follows

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

}

and my activity_twitter.xml file is

<?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>

and SendTwitterStatusUpdate.java file is

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

Now when i run my application i got this window

and apart from that when i am clicking on that button twitter log in ...that button is not working..need help

}

can anyone tell me why i am getting null on Uri uri = getIntent().getData();...uri object value is null..thus this part is not executing

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

解决方案

Check out this Demo links , you will get idea how it works and then try to implement own

you can download both you have to just create your Twitter app.That is also explain by blogger.Follow them you will get two keys.

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

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

Replace inside your activity and run your project.

First Example

Second Example

Enjoy.!!!

这篇关于Twitter的集成API不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆