Android Twitter的访问令牌无效

Android Twitter的访问令牌无效,android,twitter,twitter-oauth,access-token,Android,Twitter,Twitter Oauth,Access Token,当我尝试使用Twitter登录时,我的Android应用程序出现问题。当我登录并且Twitter授予我的帐户访问权限时,它会显示下一条消息: 等一下 此页面的请求表单令牌无效。可能是因为它已经使用或过期,因为它是一些旧的。请返回发送到此处的站点或应用程序,再试一次,可能只是一个错误 这是我的代码: AlertManager: package com.fsvp.manocio; import android.app.AlertDialog; import android.content.Con

当我尝试使用Twitter登录时,我的Android应用程序出现问题。当我登录并且Twitter授予我的帐户访问权限时,它会显示下一条消息:

等一下

此页面的请求表单令牌无效。可能是因为它已经使用或过期,因为它是一些旧的。请返回发送到此处的站点或应用程序,再试一次,可能只是一个错误

这是我的代码:

AlertManager:

 package com.fsvp.manocio;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;


public class AlertManager {

public void showAlertDialog(Context context, String title, String message, Boolean status) {

    AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle(title);

    builder.setMessage(message);

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
    });

    AlertDialog alertDialog = builder.create();

    alertDialog.show();
}

}
连接管理器:

   package com.fsvp.manocio;

   import android.content.Context;
   import android.net.ConnectivityManager;
   import android.net.NetworkInfo;

   public class ConnectionManager {

    private Context _context;

       public ConnectionManager(Context context){
           this._context = context;
       }

       public boolean isConnectingToInternet(){
           ConnectivityManager connectivity = (ConnectivityManager)               _context.getSystemService(Context.CONNECTIVITY_SERVICE);
             if (connectivity != null)
             {
                 NetworkInfo[] info = connectivity.getAllNetworkInfo();
          if (info != null)
                     for (int i = 0; i < info.length; i++)
                         if (info[i].getState() == NetworkInfo.State.CONNECTED)
                         {
                      return true;
                  }

             }
             return false;
       }

   }
主要活动:

package com.fsvp.manocio;

import com.fsvp.manocio.AlertManager;
import com.fsvp.manocio.ConnectionManager;
import com.fsvp.manocio.MainActivity;
import com.fsvp.manocio.R;
import android.support.v7.app.ActionBarActivity;
import android.os.AsyncTask;
import android.os.Bundle;
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.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

public static final String TAG = MainActivity.class.getSimpleName();

static String TWITTER_CONSUMER_KEY = "****";
static String TWITTER_CONSUMER_SECRET = "*****";

static String PREFERENCE_NAME = "twitter_oauth";
static final String PREF_KEY_ACCESS_TOKEN = "*****";
static final String PREF_KEY_ACCESS_SECRET = "*****";
static final String PREF_KEY_USER_NAME = "user_name";
static final String PREF_KEY_TWITTER_LOGIN = "isTwitterLogedIn";

static final String TWITTER_CALLBACK_URL = "https://api.twitter.com/oauth/authenticate?oauth_token=*****";

static final String URL_TWITTER_AUTH = "https://api.twitter.com/oauth/authorize";
static final String URL_TWITTER_OAUTH_VERIFIER = "https://api.twitter.com/oauth/access_token";
static final String URL_TWITTER_OAUTH_TOKEN = "https://api.twitter.com/oauth/request_token";

Button loginTwitter;
Button logoutTwitter;
TextView userName;
ImageView twitterLogo;

ProgressDialog pDialog;

private static Twitter twitter;
private static RequestToken requestToken;

private static SharedPreferences mSharedPreferences;

private ConnectionManager cm;

AlertManager alert = new AlertManager();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    cm = new ConnectionManager(getApplicationContext());

    if (!cm.isConnectingToInternet()) {
        alert.showAlertDialog(MainActivity.this, "Internet Connection Error",
                "Please connect to working Internet connection", false);
        return;
    }

    if(TWITTER_CONSUMER_KEY.trim().length() == 0 || TWITTER_CONSUMER_SECRET.trim().length() == 0){
        alert.showAlertDialog(MainActivity.this, "Twitter oAuth tokens", "Please set your twitter oauth tokens first!", false);
        return;
    }

    loginTwitter = (Button) findViewById(R.id.loginTwitter);
    twitterLogo = (ImageView) findViewById(R.id.twitterLogo);
    logoutTwitter = (Button) findViewById(R.id.logoutTwitter);
    userName = (TextView) findViewById(R.id.userName);

    mSharedPreferences = getApplicationContext().getSharedPreferences("MyPref", 0);

    loginTwitter.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            new TwitterLogin().execute();
        }
    });

    logoutTwitter.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            logoutFromTwitter();
        }
    });

    if (!isTwitterLoggedInAlready()) {
        Uri uri = getIntent().getData();
        if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) {
            String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);
            new TwitterAccessToken().execute(verifier);
        }
    }else {
        String userName = mSharedPreferences.getString(PREF_KEY_USER_NAME, "");
        enableTwitterStatus(userName);
    }
}

private class TwitterLogin extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        // Check if already logged in
        if (!isTwitterLoggedInAlready()) {
            ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
            builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
            Configuration configuration = builder.build();

            TwitterFactory factory = new TwitterFactory(configuration);
            twitter = factory.getInstance();

            try {
                requestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL);
                MainActivity.this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL())));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        if (isTwitterLoggedInAlready()) {
            Toast.makeText(MainActivity.this, "Already Logged into Twitter", Toast.LENGTH_LONG).show();
        }
    }
}

private class TwitterAccessToken extends AsyncTask<String, Void, User> {

    @Override
    protected User doInBackground(String... params) {

        String verifier = params[0];

        AccessToken accessToken = null;
        User user = null;
        try {
            accessToken = twitter.getOAuthAccessToken(requestToken, verifier);

            Editor e = mSharedPreferences.edit();

            e.putString(PREF_KEY_ACCESS_TOKEN, accessToken.getToken());
            e.putString(PREF_KEY_ACCESS_SECRET, accessToken.getTokenSecret());
            e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);


            Log.d(TAG, "Twitter OAuth Token: " + accessToken.getToken());

            long userID = accessToken.getUserId();
            user = twitter.showUser(userID);

            e.putString(PREF_KEY_USER_NAME, user.getName());

            e.commit();

        } catch (TwitterException e) {
            Log.e(TAG, "Twitter Login Error: " + e.getMessage());
            e.printStackTrace();
        }

        return user;
    }

    @Override
    protected void onPostExecute(User user) {
        super.onPostExecute(user);
        if (user != null) {
            enableTwitterStatus(user.getName());
        }
    }

}

private void enableTwitterStatus(String user) {
    // Hide login button
    loginTwitter.setVisibility(View.GONE);
    logoutTwitter.setVisibility(View.VISIBLE);
    twitterLogo.setVisibility(View.GONE);
    userName.setText(Html.fromHtml("<b>Welcome " + userName + "</b>"));
    userName.setVisibility(View.GONE);
}

private void logoutFromTwitter() {
    // Clear the shared preferences
    Editor e = mSharedPreferences.edit();
    e.remove(PREF_KEY_ACCESS_TOKEN);
    e.remove(PREF_KEY_ACCESS_SECRET);
    e.remove(PREF_KEY_TWITTER_LOGIN);
    e.commit();

    logoutTwitter.setVisibility(View.GONE);
    userName.setText("");
    userName.setVisibility(View.GONE);
    loginTwitter.setVisibility(View.VISIBLE);
    twitterLogo.setVisibility(View.VISIBLE);
}

private boolean isTwitterLoggedInAlready() {
    // return twitter login status from Shared Preferences
    return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
}

}
最后,这是我的清单:

有人知道解决办法吗

谢谢,干杯