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() + "].");