Well following code works when I make api call immediately after authorization onNewIntent event but when I put same code in Adapter class I get incorrect signature error. I am using CallbackURL. Do we always need to create consume object using verifier or setTokenWithSecret should work on subsequent calls. Any help is appreciated
Thanks if (1 == 1) // WORKS { String surl = "http://api.twitter.com/1/account/ verify_credentials.xml"; HttpGet request = null; HttpClient httpClient = null; HttpResponse response = null; request = new HttpGet(surl); httpOauthConsumer.sign(request); System.out.println("Sending request to Twitter..."); httpClient = new DefaultHttpClient(); response = httpClient.execute(request); String sresponse = parseResponseToString(response); Log.d(TAG, sresponse); } else { // GET INCORRECT SIGNATURE ERROR TwitterAdapter adapter = new TwitterAdapter(null, consumerKey, consumerSecret, userKey, userSecret); String s = adapter.VerifyUser(); Log.d(TAG, s); } Here is full code package com.sogeti.msl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import oauth.signpost.OAuthProvider; import oauth.signpost.basic.DefaultOAuthProvider; import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; import oauth.signpost.exception.OAuthCommunicationException; import oauth.signpost.exception.OAuthExpectationFailedException; import oauth.signpost.exception.OAuthMessageSignerException; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class OAuthForTwitter extends Activity { private static String TAG = "OAuthForTwitter"; private CommonsHttpOAuthConsumer httpOauthConsumer; private OAuthProvider httpOauthprovider; public final static String consumerKey = ""; public final static String consumerSecret = ""; private final String CALLBACKURL = "myapp://mainactivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); doOauth(); } private void doOauth() { try { httpOauthConsumer = new CommonsHttpOAuthConsumer(consumerKey,consumerSecret); httpOauthprovider = new DefaultOAuthProvider("http://twitter.com/ oauth/request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); String authUrl = httpOauthprovider.retrieveRequestToken( httpOauthConsumer, CALLBACKURL); this.startActivity(new Intent(Intent.ACTION_VIEW, Uri .parse(authUrl))); Log.d(TAG, "sent doOauth"); } catch (Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } Log.d(TAG, " doOauth Complete"); } @SuppressWarnings("unused") @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.d(TAG, "onNewIntent"); Uri uri = intent.getData(); if (uri != null && uri.toString().startsWith(CALLBACKURL)) { String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); Log.d(TAG, "onNewIntent " + " verifier " + verifier); try { httpOauthprovider.retrieveAccessToken(httpOauthConsumer,verifier); String userKey = httpOauthConsumer.getToken(); String userSecret = httpOauthConsumer.getConsumerSecret(); if (1 == 1) { String surl = "http://api.twitter.com/1/account/ verify_credentials.xml"; HttpGet request = null; HttpClient httpClient = null; HttpResponse response = null; request = new HttpGet(surl); httpOauthConsumer.sign(request); System.out.println("Sending request to Twitter..."); httpClient = new DefaultHttpClient(); response = httpClient.execute(request); String sresponse = parseResponseToString(response); Log.d(TAG, sresponse); } else { TwitterAdapter adapter = new TwitterAdapter(null,consumerKey, consumerSecret, userKey, userSecret); String s = adapter.VerifyUser(); Log.d(TAG, s); } } catch (Exception e) { Log.d(TAG, "onNewIntent error " + e.getMessage()); } } } public class TwitterAdapter { oauth.signpost.commonshttp.CommonsHttpOAuthConsumer consumer; public TwitterAdapter(String username, String consumerkey,String consumersecret, String accesstoken, String accesssecret) { consumer = new CommonsHttpOAuthConsumer(consumerkey, consumersecret); consumer.setTokenWithSecret(accesstoken, consumersecret); } public String VerifyUser() throws ClientProtocolException, IOException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException { String surl = "http://api.twitter.com/1/account/ verify_credentials.xml"; HttpGet request = null; HttpClient httpClient = null; HttpResponse response = null; request = new HttpGet(surl); consumer.sign(request); System.out.println("Sending request to Twitter..."); httpClient = new DefaultHttpClient(); response = httpClient.execute(request); return parseResponseToString(response); } } public String parseResponseToString(HttpResponse response) { String result = null; HttpEntity entity = null; InputStream instream = null; try { // if(Constants.debug_on) // Log.i(TAG, response.getStatusLine().toString()); entity = response.getEntity(); if (entity != null) { instream = entity.getContent(); result = convertStreamToString(instream); Log.i(TAG, result); return result; } } catch (ClientProtocolException e) { Log.e(TAG, e.getMessage()); // e.printStackTrace(); } catch (IOException e) { Log.e(TAG, e.getMessage()); // e.printStackTrace(); } finally { if (instream != null) { try { instream.close(); } catch (IOException e) { Log.e(TAG, e.getMessage()); // e.printStackTrace(); } } } return null; } private String convertStreamToString(InputStream is) { /* * To convert the InputStream to String we use the * BufferedReader.readLine() method. We iterate until the BufferedReader * return null which means there's no more data to read. Each line will * appended to a StringBuilder and returned as String. */ BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { Log.d(TAG, "**************** Error :" + e.getStackTrace().toString()); } finally { try { is.close(); } catch (IOException e) { Log.d(TAG, "**************** Error :" + e.getStackTrace().toString()); } } return sb.toString(); } } -- Twitter developer documentation and resources: http://dev.twitter.com/doc API updates via Twitter: http://twitter.com/twitterapi Issues/Enhancements Tracker: http://code.google.com/p/twitter-api/issues/list Change your membership to this group: http://groups.google.com/group/twitter-development-talk