Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过twitter api在android的twitter上共享状态?_Java_Android - Fatal编程技术网

Java 通过twitter api在android的twitter上共享状态?

Java 通过twitter api在android的twitter上共享状态?,java,android,Java,Android,可能重复: 如何通过twitter api在android上共享twitter状态?我不知道下面代码中的错误是什么。请帮助我 我得到的错误如下: 10-12 16:10:42.966: E/AndroidRuntime(1019): java.lang.NullPointerException 10-12 16:10:42.966: E/AndroidRuntime(1019): at com.example.news.TwitterUtils.isAuthenticated(Twit

可能重复:

如何通过twitter api在android上共享twitter状态?我不知道下面代码中的错误是什么。请帮助我

我得到的错误如下:

10-12 16:10:42.966: E/AndroidRuntime(1019): java.lang.NullPointerException
10-12 16:10:42.966: E/AndroidRuntime(1019):     at com.example.news.TwitterUtils.isAuthenticated(TwitterUtils.java:21)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at com.example.news.second$1.onClick(second.java:45)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at android.view.View.performClick(View.java:2485)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at android.view.View$PerformClick.run(View.java:9080)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at android.os.Handler.handleCallback(Handler.java:587)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at android.os.Looper.loop(Looper.java:123)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at java.lang.reflect.Method.invokeNative(Native Method)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at java.lang.reflect.Method.invoke(Method.java:507)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-12 16:10:42.966: E/AndroidRuntime(1019):     at dalvik.system.NativeStart.main(Native Method)
我的代码如下:---

PrepareRequestTokenActivity类:

public class PrepareRequestTokenActivity extends Activity{

    final String TAG = getClass().getName();

    private OAuthConsumer consumer; 
    private OAuthProvider provider;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            this.consumer = new CommonsHttpOAuthConsumer(constant.CONSUMER_KEY, constant.CONSUMER_SECRET);
            this.provider = new CommonsHttpOAuthProvider(constant.REQUEST_URL,constant.ACCESS_URL,constant.AUTHORIZE_URL);
        } catch (Exception e) {
            Log.e(TAG, "Error creating consumer / provider",e);
        }

        Log.i(TAG, "Starting task to retrieve request token.");
        new OAuthRequestTokenTask(this,consumer,provider).execute();
    }

    /**
     * Called when the OAuthRequestTokenTask finishes (user has authorized the request token).
     * The callback URL will be intercepted here.
     */
    @Override
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent); 
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        final Uri uri = intent.getData();
        if (uri != null && uri.getScheme().equals(constant.OAUTH_CALLBACK_SCHEME)) {
            Log.i(TAG, "Callback received : " + uri);
            Log.i(TAG, "Retrieving Access Token");
            new RetrieveAccessTokenTask(this,consumer,provider,prefs).execute(uri);
            finish();   
        }
    }

    public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Void> {

        private Context context;
        private OAuthProvider provider;
        private OAuthConsumer consumer;
        private SharedPreferences prefs;

        public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,OAuthProvider provider, SharedPreferences prefs) {
            this.context = context;
            this.consumer = consumer;
            this.provider = provider;
            this.prefs=prefs;
        }


        /**
         * Retrieve the oauth_verifier, and store the oauth and oauth_token_secret 
         * for future API calls.
         */
        @Override
        protected Void doInBackground(Uri...params) {
            final Uri uri = params[0];
            final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);

            try {
                provider.retrieveAccessToken(consumer, oauth_verifier);

                final Editor edit = prefs.edit();
                edit.putString(OAuth.OAUTH_TOKEN, consumer.getToken());
                edit.putString(OAuth.OAUTH_TOKEN_SECRET, consumer.getTokenSecret());
                edit.commit();

                String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
                String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");

                consumer.setTokenWithSecret(token, secret);
                context.startActivity(new Intent(context,second.class));

                executeAfterAccessTokenRetrieval();

                Log.i(TAG, "OAuth - Access Token Retrieved");

            } catch (Exception e) {
                Log.e(TAG, "OAuth - Access Token Retrieval Error", e);
            }

            return null;
        }


        private void executeAfterAccessTokenRetrieval() {
            String msg = getIntent().getExtras().getString("tweet_msg");
            try {
                String path = null;
                TwitterUtils.sendTweet(prefs, msg, path);
            } catch (Exception e) {
                Log.e(TAG, "OAuth - Error sending to Twitter", e);
            }
        }
    }   



}
常数类:

public class constant {

    public static final String CONSUMER_KEY = "CNHQcuaUX6sNZnbwEI1uZQ";
    public static final String CONSUMER_SECRET= "SUu7F84kyYaMJ39i9E9x0mcMNSp2cPbkA91SRtP9J0";

    public static final String REQUEST_URL = "  https://api.twitter.com/oauth/request_token";
    public static final String ACCESS_URL = "https://api.twitter.com/oauth/access_token";
    public static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize";

    public static final String  OAUTH_CALLBACK_SCHEME   = "x-oauthflow-twitter";
    public static final String  OAUTH_CALLBACK_HOST     = "callback";
    public static final String  OAUTH_CALLBACK_URL      = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;

}

您可以使用twitter4j API

Twitter twitter = new TwitterFactory().getInstance();
Status status = twitter.updateStatus(latestStatus);
System.out.println("Successfully updated the status to [" + status.getText() + "].");

我在这里添加了我的代码,我不知道其中的错误是什么。请帮助我。谢谢。我从未使用过Twitter,但您的错误来源很清楚:
java.lang.NullPointerException。。。在com.example.news.TwitterUtils.isAuthenticated(TwitterUtils.java:21)
。在TwitterUtils的第21行,您试图访问一个
null
的变量。
public class constant {

    public static final String CONSUMER_KEY = "CNHQcuaUX6sNZnbwEI1uZQ";
    public static final String CONSUMER_SECRET= "SUu7F84kyYaMJ39i9E9x0mcMNSp2cPbkA91SRtP9J0";

    public static final String REQUEST_URL = "  https://api.twitter.com/oauth/request_token";
    public static final String ACCESS_URL = "https://api.twitter.com/oauth/access_token";
    public static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize";

    public static final String  OAUTH_CALLBACK_SCHEME   = "x-oauthflow-twitter";
    public static final String  OAUTH_CALLBACK_HOST     = "callback";
    public static final String  OAUTH_CALLBACK_URL      = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;

}
Twitter twitter = new TwitterFactory().getInstance();
Status status = twitter.updateStatus(latestStatus);
System.out.println("Successfully updated the status to [" + status.getText() + "].");