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

Reply via email to