0

我尝试写在 twitter 上分享一个帖子,但这段代码适用于 Galaxy S2,但它不适用于 Galaxy s3 ......我不知道为什么。在这个链接有日志错误:http: //it.tinypic.com/r/2wqyd1w/5

这是推特的代码:

public class TwitterActivity extends Activity {

    private Twitter twitter;


    public final String PREFS = "MyPrefsFile";
    final public  String CALLBACK_URL = "app://casa";
    private SharedPreferences shared;
    private static RequestToken requestToken=null;
    private LinkedList<RequestToken> lista=new LinkedList<RequestToken>();
    private int it = 0;
    private String frase = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_twitter);

        it = getIntent().getExtras().getInt("punteggio");
        frase = getIntent().getExtras().getString("frase");
        shared = this.getSharedPreferences(PREFS, Context.MODE_PRIVATE);

        Button b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(new View.OnClickListener() {

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

            }
        });

    }

    @Override
    public void onNewIntent(Intent data) {
        super.onNewIntent(data);
        dealWithTwitterResponse(data);

    }

    class updateTwitterStatus extends AsyncTask<Void, Void, String> {

        private Intent i = null;

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

            ConfigurationBuilder cb = new ConfigurationBuilder();

            cb.setDebugEnabled(true)
                    .setOAuthConsumerKey("********")
                    .setOAuthConsumerSecret(
                            "**********");

            TwitterFactory tf = new TwitterFactory(cb.build());
            Twitter twitter = new TwitterFactory().getInstance();
            twitter = tf.getInstance();

            try {
                requestToken = twitter.getOAuthRequestToken(CALLBACK_URL);
                Log.i("Stringa",requestToken.toString());


                Log.i("bauu", "miao");

                String authUrl = requestToken.getAuthenticationURL();


                startActivity(new Intent(Intent.ACTION_VIEW,
                        Uri.parse(requestToken.getAuthenticationURL())));

                return authUrl;

            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

    }

    @Override
    public void onResume() {
        Log.i("reume","re");
        super.onResume();
    }

    private void dealWithTwitterResponse(final Intent intent) {
        Log.i("Sonod entro", "vau");
        final Uri uri = intent.getData();
        if (uri == null) {
            Log.i("è null", "null");
        }
        Log.i("callback funziona", "ciao");
        if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
            final String verifier = uri.getQueryParameter("oauth_verifier");
            final String oauthToken = uri.getQueryParameter("oauth_token");
            new Thread(new Runnable() {
                public void run() {
                    try {
//                      
//                      if(requestToken==null){
//                          Log.i("Il TOKEN è NULL","uihuh");
//                      }else{
//                          Log.i("IL TOKEN NON E NULL","huèh ");
//                      }
//                      if(verifier==null){
//                          Log.i("Verifier nullo","sdg");
//                      }else{
//                          Log.i("Verifier non null","asdfg");
//                      }
                        Log.i("SOno dentro il run", "asd");
//the next line throws exception
                        AccessToken at = twitter.getOAuthAccessToken(
                                requestToken,verifier);

                        twitter.setOAuthAccessToken(at);
                        twitter.updateStatus("CHI VUOLE ESSERE SCIENZIATO?? Punteggio: "
                                + it
                                + " "
                                + frase
                                + " "
                                + "www.scienze-naturali.com");

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.punteggio, menu);
        return true;
    }

}

这是我的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.applicazionescienza"
    android:versionCode="1"
    android:versionName="1.0" >



    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />

    <uses-permission
    android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.applicazionescienza.MenuPrincipale"
            android:label="@string/app_name"
            android:launchMode="singleInstance" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.example.applicazionescienza.Informazioni"
            android:label="@string/title_activity_informazioni" >
        </activity>
        <activity
            android:name="com.example.applicazionescienza.Regolamento"
            android:label="@string/title_activity_regolamento" >
        </activity>
        <activity
            android:name="com.example.applicazionescienza.Gioca"
            android:label="@string/title_activity_gioca" >
        </activity>
        <activity
            android:name="com.example.applicazionescienza.Livello"
            android:label="@string/title_activity_livello" >
        </activity>
        <activity
            android:name="com.example.applicazionescienza.Punteggio"
            android:label="@string/title_activity_punteggio" >
        </activity>
        <activity
            android:name="com.example.applicazionescienza.TwitterActivity"
            android:label="@string/title_activity_twitter"
            android:launchMode="singleInstance" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="casa"
                    android:scheme="app" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.applicazionescienza.FacebookActivity"
            android:label="@string/title_activity_facebook" >
        </activity>
    </application>

</manifest>

我在其他真实设备中尝试此代码。在一台设备中运行良好,但在我的设备中,相同的代码不起作用。任何人都可以帮助我理解为什么?

4

1 回答 1

0

好像twitternull这里

AccessToken at = twitter.getOAuthAccessToken(
                            requestToken,verifier);

AsyncTask因为在你运行你的初始化twitter变量之前调用了这个方法。

尝试在onPostExecute()您的中调用此方法,AsyncTask因为doInBackground()完成后将调用此方法。

于 2013-11-08T21:13:42.053 回答