Java tutorial
package com.ridhofkr.hanacaraka.connector.twitter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLDecoder; import oauth.signpost.OAuthProvider; import oauth.signpost.basic.DefaultOAuthProvider; import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; import twitter4j.Twitter; import twitter4j.TwitterFactory; import twitter4j.User; import twitter4j.http.AccessToken; import android.app.Activity; import android.app.ProgressDialog; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Window; import android.widget.Toast; /* Copyright [2010] [Abhinava Srivastava] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ public class TwitterApp { private Twitter mTwitter; private TwitterSession mSession; private AccessToken mAccessToken; private CommonsHttpOAuthConsumer mHttpOauthConsumer; private OAuthProvider mHttpOauthprovider; private String mConsumerKey; private String mSecretKey; private ProgressDialog mProgressDlg; private TwDialogListener mListener; private Activity context; public static final String CALLBACK_URL = "twitterapp://connect"; private static final String TWITTER_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token"; private static final String TWITTER_AUTHORZE_URL = "https://api.twitter.com/oauth/authorize"; private static final String TWITTER_REQUEST_URL = "https://api.twitter.com/oauth/request_token"; public TwitterApp(Activity context, String consumerKey, String secretKey) { this.context = context; mTwitter = new TwitterFactory().getInstance(); mSession = new TwitterSession(context); mProgressDlg = new ProgressDialog(context); mProgressDlg.requestWindowFeature(Window.FEATURE_NO_TITLE); mConsumerKey = consumerKey; mSecretKey = secretKey; mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey); String request_url = TWITTER_REQUEST_URL; String access_token_url = TWITTER_ACCESS_TOKEN_URL; String authorize_url = TWITTER_AUTHORZE_URL; mHttpOauthprovider = new DefaultOAuthProvider(request_url, access_token_url, authorize_url); mAccessToken = mSession.getAccessToken(); configureToken(); } public void setListener(TwDialogListener listener) { mListener = listener; } @SuppressWarnings("deprecation") private void configureToken() { if (mAccessToken != null) { mTwitter.setOAuthConsumer(mConsumerKey, mSecretKey); mTwitter.setOAuthAccessToken(mAccessToken); } } public boolean hasAccessToken() { return (mAccessToken == null) ? false : true; } public void resetAccessToken() { if (mAccessToken != null) { mSession.resetAccessToken(); mAccessToken = null; } } public String getUsername() { return mSession.getUsername(); } public void updateStatus(String status) { mProgressDlg.setMessage("Share pencapaian ke Twitter"); mProgressDlg.show(); final String update = status; new Thread() { public void run() { try { mTwitter.updateStatus(update); mProgressDlg.dismiss(); mHandler.sendMessage(mHandler.obtainMessage(3, 1, 0)); } catch (Exception e) { e.printStackTrace(); Log.e("Twitter", e.getMessage()); mProgressDlg.dismiss(); mHandler.sendMessage(mHandler.obtainMessage(3, 0, 0)); } } }.start(); } public void authorize() { mProgressDlg.setMessage("Initializing ..."); mProgressDlg.show(); new Thread() { @Override public void run() { String authUrl = ""; int what = 1; try { authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL); what = 0; } catch (Exception e) { e.printStackTrace(); } mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl)); } }.start(); } public void processToken(String callbackUrl) { mProgressDlg.setMessage("Finalizing ..."); mProgressDlg.show(); final String verifier = getVerifier(callbackUrl); new Thread() { @Override public void run() { int what = 1; try { mHttpOauthprovider.retrieveAccessToken(mHttpOauthConsumer, verifier); mAccessToken = new AccessToken(mHttpOauthConsumer.getToken(), mHttpOauthConsumer.getTokenSecret()); configureToken(); User user = mTwitter.verifyCredentials(); mSession.storeAccessToken(mAccessToken, user.getScreenName()); what = 0; } catch (Exception e) { e.printStackTrace(); } mHandler.sendMessage(mHandler.obtainMessage(what, 2, 0)); } }.start(); } private String getVerifier(String callbackUrl) { String verifier = ""; try { callbackUrl = callbackUrl.replace("twitterapp", "http"); URL url = new URL(callbackUrl); String query = url.getQuery(); String array[] = query.split("&"); for (String parameter : array) { String v[] = parameter.split("="); if (URLDecoder.decode(v[0]).equals(oauth.signpost.OAuth.OAUTH_VERIFIER)) { verifier = URLDecoder.decode(v[1]); break; } } } catch (MalformedURLException e) { e.printStackTrace(); } return verifier; } private void showLoginDialog(String url) { final TwDialogListener listener = new TwDialogListener() { public void onComplete(String value) { processToken(value); } public void onError(String value) { mListener.onError("Failed opening authorization page"); } }; new TwitterDialog(context, url, listener).show(); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mProgressDlg.dismiss(); if (msg.what == 1) { if (msg.arg1 == 1) mListener.onError("Error getting request token"); else mListener.onError("Error getting access token"); } else if (msg.what == 3) { if (msg.arg1 == 1) { Toast.makeText(context, "Pencapaian berhasil dipublikasikan!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "Pencapaian gagal dipublikasikan!", Toast.LENGTH_LONG).show(); } } else { if (msg.arg1 == 1) showLoginDialog((String) msg.obj); else mListener.onComplete(""); } } }; public interface TwDialogListener { public void onComplete(String value); public void onError(String value); } }