tendencias puedo porque para mejor lento detiene cliente carga bien aplicacion anda actualiza abrir android twitter twitter4j

puedo - Conexión de Android con Twitter: obtenga una respuesta nula de Twitter



twitter no carga bien (2)

Después de pasar horas leyendo la documentación (ahora no tengo ojos), cuando trato de obtener el access_token lo llamo así:

// Get the access token AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);

Paso el verificador (que es el pase de alfiler, pero el pase de alfiler ya no se usa) y él es nulo porque ya no usa Twitter, entonces solo necesito reescribirlo con esto:

// Get the access token AccessToken accessToken = twitter.getOAuthAccessToken(requestToken);

Solo necesita el requestToken para obtener access_token.

Espero que esto ayude a cualquiera que tenga el mismo problema.

Grettings.

Tengo un problema de% & · $ 5 # ~ ​​€ con la conexión a Twitter. (El código se publica debajo de esto)

Primero, lo he configurado todo (teclas de twitter, devolución de llamada en el manifiesto, etc.), luego hago la llamada a Twitter y abro el navegador, luego inicio sesión en Twitter y acepto la aplicación, luego el navegador vuelve a la aplicación y trato de obtener la respuesta de Twitter, pero obtengo NULL como respuesta.

¿Alguien puede ayudarme a encontrar lo que está pasando con esto?

Grettings

PD: Sigo este tutorial: http://www.androidhive.info/2012/09/android-twitter-oauth-connect-tutorial/

PD 2: Algunas personas piensan que el problema es la fecha y la hora del teléfono ( https://dev.twitter.com/discussions/374 ), pero lo cambié y no funciona

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.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.StrictMode; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.Toast; @SuppressLint("NewApi") public class TwitterActivity extends Activity { Intent TWITTER_INTENT = null; //TWITTER THINGS static String TWITTER_CONSUMER_KEY = "CONSUMER_KEY_HERE"; static String TWITTER_CONSUMER_SECRET = "CONSUMER_SECRET_HERE"; static final String TWITTER_CALLBACK_URL = "oauth://t4jsample"; // Twitter oauth urls 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"; // Progress dialog ProgressDialog pDialog; // Twitter public static Twitter twitter; public static String twitter_token, twitter_secret; // Internet Connection detector private ConnectionDetector cd; // Alert Dialog Manager AlertDialogManager alert = new AlertDialogManager(); // Preference Constants static String PREFERENCE_NAME = "twitter_oauth"; static final String PREF_KEY_OAUTH_TOKEN = "oauth_token"; static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret"; static final String PREF_KEY_TWITTER_LOGIN = "isTwitterLogedIn"; // Twitter private static RequestToken requestToken; // Shared Preferences private static SharedPreferences mSharedPreferences; @SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_twitter); if (Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); cd = new ConnectionDetector(getApplicationContext()); // Check if Internet present if (!cd.isConnectingToInternet()) { // Internet Connection is not present alert.showAlertDialog(TwitterActivity.this, "Internet Connection Error","Please connect to working Internet connection", false); // stop executing code by return return; } // Check if twitter keys are set if(TWITTER_CONSUMER_KEY.trim().length() == 0 || TWITTER_CONSUMER_SECRET.trim().length() == 0){ // Internet Connection is not present alert.showAlertDialog(TwitterActivity.this, "Twitter oAuth tokens", "Please set your twitter oauth tokens first!", false); // stop executing code by return return; } // Shared Preferences mSharedPreferences = getApplicationContext().getSharedPreferences("MyPref", 0); ImageView TW = (ImageView) findViewById(R.id.twitter_boton); TW.setClickable(true); TW.setOnClickListener(new OnClickListener(){ public void onClick(View v){ loginToTwitter(); } }); /** This if conditions is tested once is * redirected from twitter page. Parse the uri to get oAuth * Verifier * */ if (!isTwitterLoggedInAlready()) { Uri uri = getIntent().getData(); if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { // oAuth verifier String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); try { // Get the access token AccessToken accessToken = twitter.getOAuthAccessToken( requestToken, verifier); // Shared Preferences Editor e = mSharedPreferences.edit(); // After getting access token, access token secret // store them in application preferences e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret()); // Store login status - true e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); e.commit(); // save changes Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); // Getting user details from twitter // For now i am getting his name only long userID = accessToken.getUserId(); User user = twitter.showUser(userID); String username = user.getName(); Log.d("nombre",username); } catch (Exception e) { // Check log for login errors Log.e("Twitter Login Error", "> " + e.toString()); Log.e("Twitter Login Error", "> " + e.getMessage()); } } } } /** * Function to login twitter * */ private void loginToTwitter() { // 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(); if(!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)) { try { requestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL); this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL()))); } catch (TwitterException e) { e.printStackTrace(); } } else { new Thread(new Runnable() { public void run() { try { requestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL); TwitterActivity.this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL()))); } catch (TwitterException e) { e.printStackTrace(); } } }).start(); } } else { // user already logged into twitter Toast.makeText(getApplicationContext(), "Already Logged into twitter", Toast.LENGTH_LONG).show(); } } /** * Function to update status * */ class updateTwitterStatus extends AsyncTask<String, String, String> { /** * Before starting background thread Show Progress Dialog * */ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(TwitterActivity.this); pDialog.setMessage("Updating to twitter..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } /** * getting Places JSON * */ protected String doInBackground(String... args) { Log.d("Tweet Text", "> " + args[0]); String status = args[0]; try { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); // Access Token String access_token = mSharedPreferences.getString(PREF_KEY_OAUTH_TOKEN, ""); // Access Token Secret String access_token_secret = mSharedPreferences.getString(PREF_KEY_OAUTH_SECRET, ""); AccessToken accessToken = new AccessToken(access_token, access_token_secret); Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken); // Update status twitter4j.Status response = twitter.updateStatus(status); Log.d("Status", "> " + response.getText()); } catch (TwitterException e) { // Error in updating status Log.d("Twitter Update Error", e.getMessage()); } return null; } /** * After completing background task Dismiss the progress dialog and show * the data in UI Always use runOnUiThread(new Runnable()) to update UI * from background thread, otherwise you will get error * **/ protected void onPostExecute(String file_url) { // dismiss the dialog after getting all products pDialog.dismiss(); // updating UI from Background Thread runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Status tweeted successfully", Toast.LENGTH_SHORT) .show(); // Clearing EditText field } }); } } /** * Check user already logged in your application using twitter Login flag is * fetched from Shared Preferences * */ private boolean isTwitterLoggedInAlready() { // return twitter login status from Shared Preferences return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false); } protected void onResume() { super.onResume(); } }


Revisé tu código (debido a un problema similar) y encontré un error. Mira, cuando el foco vuelve a la aplicación de nuevo, después de recibir requestToken, intentas obtener el oAuth verifier con un valor constante incorrecto.

String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);

donde URL_TWITTER_OAUTH_VERIFIER en su código es

URL_TWITTER_OAUTH_VERIFIER = "https://api.twitter.com/oauth/access_token" (!)

pero debe establecer en getQueryParameter(OAUTH_VERIFIER); otro valor

OAUTH_VERIFIER = = "oauth_verifier";

¡y tu código se volvió completamente correcto!

Y la solución que JosephCastro sugirió para mí no está funcionando.