title: Android: twitter authorization and login issue
body: <p>I integrated twitter in android app. Here i faced some problems.</p>
  
  <p>My App is crashed when I click on twitter login button and here is the logcat error which I got.</p>
  
  <pre><code>08-13 17:42:06.893: E/AndroidRuntime(9229): FATAL EXCEPTION: AsyncTask #2
  08-13 17:42:06.893: E/AndroidRuntime(9229): java.lang.RuntimeException: An error occured while executing doInBackground()
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.lang.Thread.run(Thread.java:841)
  08-13 17:42:06.893: E/AndroidRuntime(9229): Caused by: java.lang.NoClassDefFoundError: twitter4j.conf.ConfigurationBuilder
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at com.example.studentjob.JobFinalPage$LoginToTwitterTask.doInBackground(JobFinalPage.java:173)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at com.example.studentjob.JobFinalPage$LoginToTwitterTask.doInBackground(JobFinalPage.java:1)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  08-13 17:42:06.893: E/AndroidRuntime(9229):     ... 4 more
  08-13 17:42:19.225: D/AbsListView(9229): onVisibilityChanged() is called, visibility : 0
  08-13 17:42:19.225: D/AbsListView(9229): unregisterIRListener() is called 
  08-13 17:42:19.386: E/WindowManager(9229): Activity com.example.studentjob.JobFinalPage has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{4297b660 V.E..... R......D 0,0-464,500} that was originally added here
  08-13 17:42:19.386: E/WindowManager(9229): android.view.WindowLeaked: Activity com.example.studentjob.JobFinalPage has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{4297b660 V.E..... R......D 0,0-464,500} that was originally added here
  08-13 17:42:19.386: E/WindowManager(9229):  at android.view.ViewRootImpl.&lt;init&gt;(ViewRootImpl.java:450)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.app.Dialog.show(Dialog.java:287)
  08-13 17:42:19.386: E/WindowManager(9229):  at com.example.studentjob.JobFinalPage$LoginToTwitterTask.onPreExecute(JobFinalPage.java:201)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.os.AsyncTask.execute(AsyncTask.java:534)
  08-13 17:42:19.386: E/WindowManager(9229):  at com.example.studentjob.JobFinalPage$1.onClick(JobFinalPage.java:105)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.view.View.performClick(View.java:4475)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.view.View$PerformClick.run(View.java:18786)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.os.Handler.handleCallback(Handler.java:730)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.os.Handler.dispatchMessage(Handler.java:92)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.os.Looper.loop(Looper.java:137)
  08-13 17:42:19.386: E/WindowManager(9229):  at android.app.ActivityThread.main(ActivityThread.java:5419)
  08-13 17:42:19.386: E/WindowManager(9229):  at java.lang.reflect.Method.invokeNative(Native Method)
  08-13 17:42:19.386: E/WindowManager(9229):  at java.lang.reflect.Method.invoke(Method.java:525)
  08-13 17:42:19.386: E/WindowManager(9229):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
  08-13 17:42:19.386: E/WindowManager(9229):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
  08-13 17:42:19.386: E/WindowManager(9229):  at dalvik.system.NativeStart.main(Native Method)
  08-13 17:42:21.558: I/Process(9229): Sending signal. PID: 9229 SIG: 9
  08-13 17:42:21.918: D/AbsListView(9795): Get MotionRecognitionManager
  08-13 17:42:21.928: D/AbsListView(9795): Get MotionRecognitionManager
  08-13 17:42:21.928: D/AbsListView(9795): Get MotionRecognitionManager
  08-13 17:42:21.938: D/AbsListView(9795): Get MotionRecognitionManager
  08-13 17:42:21.938: D/AbsListView(9795): Get MotionRecognitionManager
  08-13 17:42:22.088: D/libEGL(9795): loaded /vendor/lib/egl/libEGL_adreno.so
  08-13 17:42:22.088: D/libEGL(9795): loaded /vendor/lib/egl/libGLESv1_CM_adreno.so
  08-13 17:42:22.098: D/libEGL(9795): loaded /vendor/lib/egl/libGLESv2_adreno.so
  08-13 17:42:22.098: I/Adreno-EGL(9795): &lt;qeglDrvAPI_eglInitialize:316&gt;: EGL 1.4 QUALCOMM build:  (CL4169980)
  08-13 17:42:22.098: I/Adreno-EGL(9795): OpenGL ES Shader Compiler Version: 17.01.10.SPL
  08-13 17:42:22.098: I/Adreno-EGL(9795): Build Date: 09/26/13 Thu
  08-13 17:42:22.098: I/Adreno-EGL(9795): Local Branch: 
  08-13 17:42:22.098: I/Adreno-EGL(9795): Remote Branch: 
  08-13 17:42:22.098: I/Adreno-EGL(9795): Local Patches: 
  08-13 17:42:22.098: I/Adreno-EGL(9795): Reconstruct Branch: 
  08-13 17:42:22.158: D/OpenGLRenderer(9795): Enabling debug mode 0
  </code></pre>
  
  <p>Here is the code:</p>
  
  <pre><code>SharedPreferences pref;
  Editor editor;
  private static SharedPreferences mSharedPreferences;
  private static Twitter twitter;
  private static RequestToken requestToken;
  public final String consumer_key = "z2E7ISesmQsjDRah5qFA";
  public final String secret_key = "IcJHyb74pYhOUupkbO7Vez5a0VxJ4aHiYOviQUDMk4";
  // Preference Constants
  static String PREFERENCE_NAME = "twitter_oauth";
  static final String PREF_KEY_OAUTH_TOKEN = "oauth_token";
  static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret";
  static final String URL_TWITTER_AUTH = "https://api.twitter.com/oauth/authorize";
  static final String URL_TWITTER_OAUTH_VERIFIER = "oauth_verifier";
  static final String URL_TWITTER_OAUTH_TOKEN = "oauth_token";
  String resgid,prelocation,prefdescription,prefjurl;
  SharedPreferences preferences;
  
  protected void onCreate(Bundle savedInstanceState)
  {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.jobdetails);
      Intent intent=getIntent();
      tittle=intent.getStringExtra("usertittle");
      userdescription=intent.getStringExtra("userdescription");
      joburl=intent.getStringExtra("joburl");
      location=intent.getStringExtra("location");
      if(tittle!=null)
      {
          preferences = getSharedPreferences("m_key",MODE_PRIVATE);
          SharedPreferences.Editor editor = preferences.edit();
          editor.putString("tittle", tittle);
          editor.putString("description", userdescription);
          editor.putString("location", location);
          editor.putString("jurl", joburl);
          editor.commit();
      }
      SharedPreferences myPrefs = getSharedPreferences("m_key",
              MODE_WORLD_READABLE);
      resgid = myPrefs.getString("tittle",null);
      prelocation=myPrefs.getString("location",null);
      prefdescription=myPrefs.getString("description",null);
      prefjurl=myPrefs.getString("jurl",null);
      title=(TextView) findViewById(R.id.comapnyname);
      description=(TextView) findViewById(R.id.description);
      locationtext=(TextView) findViewById(R.id.locationname);
      company=(TextView) findViewById(R.id.tittlename);
      twit=(ImageButton) findViewById(R.id.twitter);
      jobshare=(ImageButton) findViewById(R.id.share);
      if(tittle!=null){
          company.setText(tittle);
          title.setText("N/A");
          description.setText(userdescription);
          locationtext.setText(location);
      }else{
          company.setText(resgid);
          title.setText("N/A");
          description.setText(prefdescription);
          locationtext.setText(prelocation);
      }
  
      mSharedPreferences = getSharedPreferences("twitter_oauth", MODE_PRIVATE);
      twit.setOnClickListener(new OnClickListener() 
      {
          @Override
          public void onClick(View v) 
          {
              //Intent intent=new Intent(getApplicationContext(),JobResult.class);
              //startActivity(intent);    
              if(isConnected())
              {
                  twit.setImageResource(R.drawable.sharetwitterselected);
  
              }else{
                  twit.setImageResource(R.drawable.sharetwitterselected);
                  LoginToTwitterTask login = new LoginToTwitterTask();
                  login.execute();
              }
  
          }
      });
      jobshare.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) 
          {
              Uri uri = getIntent().getData();            
              HandleOuthCallBack hc = new HandleOuthCallBack();
              hc.execute(uri);
              try
              {
                  String Sharetext=resgid+"\nJob URL :"+prefjurl+"\nPosted By \n Student Job. ";
                  new updateTwitterStatus().execute(Sharetext);
              }
              catch (Exception e) 
              {
                  e.printStackTrace();
  
              }
  
          }
      });
  
  
  }
  
  
  private boolean isConnected()
  {
      return mSharedPreferences.getString("oauth_token", null) != null;
  }
  private class HandleOuthCallBack extends AsyncTask&lt;Object, Void, Void&gt; {
      @Override
      protected Void doInBackground(Object... params) {
          try{
              Uri uri = (Uri) params[0];
              String verifier = uri.getQueryParameter("oauth_verifier");
              AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier); 
              Editor e = mSharedPreferences.edit();
              e.putString("oauth_token", accessToken.getToken()); 
              e.putString("oauth_token_secret", accessToken.getTokenSecret()); 
              e.commit();
          }catch(Exception e)
          {
              e.printStackTrace();
          }
  
          return null;
      }
  
      @Override
      protected void onPostExecute(Void result) {
          super.onPostExecute(result);
  
      }
      @Override
      protected void onPreExecute() {
  
      }
  }
  ProgressDialog dialog;
  private class LoginToTwitterTask extends AsyncTask&lt;Void, Void, Void&gt; {
      @Override
      protected Void doInBackground(Void... params) {
          try{
              ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
              configurationBuilder.setOAuthConsumerKey("z2E7ISesmQsjDRah5qFA");
              configurationBuilder.setOAuthConsumerSecret("IcJHyb74pYhOUupkbO7Vez5a0VxJ4aHiYOviQUDMk4");
              Configuration configuration = configurationBuilder.build();
              twitter = new TwitterFactory(configuration).getInstance();
              requestToken = twitter.getOAuthRequestToken("oauth://StudentJob");
              dialog.dismiss();
              Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL()));
              intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              getApplicationContext().startActivity(intent);
          }catch(Exception e){
              e.printStackTrace();
          }
          return null;
      }
      @Override
      protected void onPostExecute(Void result) 
      {
          super.onPostExecute(result);
  
      }
      @Override
      protected void onPreExecute() {
          super.onPreExecute();
          dialog = new ProgressDialog(JobFinalPage.this);
          dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
          dialog.setMax(100);
          dialog.setTitle("Loading ..");
          dialog.show();  
  
      }
  }
  
  class updateTwitterStatus extends AsyncTask&lt;String, String, String&gt; {
      /**
       * Before starting background thread Show Progress Dialog
       * */
      @Override
      protected void onPreExecute() 
      {
          super.onPreExecute();
  
      }
      /**
       * getting Places JSON
       * */
      protected String doInBackground(String... args) {
          String status = args[0];
          try 
          {
              ConfigurationBuilder builder = new ConfigurationBuilder();
              builder.setOAuthConsumerKey("z2E7ISesmQsjDRah5qFA");
              builder.setOAuthConsumerSecret("IcJHyb74pYhOUupkbO7Vez5a0VxJ4aHiYOviQUDMk4");
              // Access Token 
              try{
                  String access_token = mSharedPreferences.getString("oauth_token", "");
                  // Access Token Secret
                  String access_token_secret = mSharedPreferences.getString("oauth_token_secret", "");
                  AccessToken accessToken = new AccessToken(access_token, access_token_secret);
                  Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken);
              }
              catch(Exception e)
              {
                  e.printStackTrace();    
              }
  
              // Update status
              twitter4j.Status response = twitter.updateStatus(status);
          } catch (TwitterException e) {
              // Error in updating status
              e.printStackTrace();
          }
          return null;
      }
  
      /**
       * After completing background task Dismiss the progress dialog and show
       * the data in UI Always use runOnUiThread(new Runnable()) to update UI
       * from background thread, otherwise you will get error
       * **/
      protected void onPostExecute(String file_url) {
          // dismiss the dialog after getting all products
  
          // updating UI from Background Thread
          runOnUiThread(new Runnable() {
              @Override
              public void run() 
              {
                  Toast.makeText(getApplicationContext(),
                          "Status tweeted successfully", Toast.LENGTH_SHORT).show();
              }
          });
      } 
  </code></pre>
  
  <p>Can anyone help me on this?</p>