2013-08-30 102 views
-1

我在twitter android连接的应用程序中使用两个活动。第一项活动是LoginActivity,第二项是TweetslistActivity。我在loginActivity中使用了一个按钮,在它的点击,twitter登录对话框打开。当用户成功登录时,我的应用程序应该打开第二个活动。但用户通过身份验证后,我的第一个活动继续,我必须再次点击登录按钮才能进入我的第二个活动!再次恢复第一个活动,而不是去第二个活动

the logcat shows: 
08-30 05:05:48.477: I/dalvikvm-heap(4205): Grow heap (frag case) to 6.686MB for 4194320-byte allocation 
08-30 05:05:48.557: D/dalvikvm(4205): GC_FOR_ALLOC freed 0K, 3% free 6732K/6920K, paused 76ms, total 76ms 
08-30 05:05:49.288: D/gralloc_goldfish(4205): Emulator without GPU emulation detected. 
08-30 05:05:55.757: V/tweetsData--(4205): null 
08-30 05:06:11.897: E/Twitter Login Error(4205): > No Token available. 

我还在Manifest文件中使用了'android:launchMode ='singleTask''。但它只是引导我从第一次活动到第二次没有登录!我只是卡住,但没有得到任何答案。请提出一些很好的解决方案。先谢谢你。

编辑:

原始代码:

public class TwitterLoginActivity extends Activity { 
    TextView tv; 
    Button loginBtn; 
    ImageView logo; 
    private ConnectionDetector cd; 
    static Twitter twitter; 
    ProgressDialog pDialog; 
    ArrayList<String> tweets; 
    String tweetsData; 

    private static SharedPreferences mSharedPreferences; 
    AlertDialogManager alert = new AlertDialogManager(); 
    RequestToken requestToken; 
    AccessToken accessToken; 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.twitter_login); 
      tweets = new ArrayList<String>(); 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      if (android.os.Build.VERSION.SDK_INT > 9) { 
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
            .permitAll().build(); 
        StrictMode.setThreadPolicy(policy); 
      } 
      cd = new ConnectionDetector(getApplicationContext()); 
      if (!cd.isConnectingToInternet()) { 
        alert.showAlertDialog(TwitterLoginActivity.this, 
            "Internet Connection Error", 
            "Please connect to working Internet connection", false); 
        return; 
      } 

      if (CONSUMER_KEY.trim().length() == 0 
          || CONSUMER_SECRET.trim().length() == 0) { 
        // Internet Connection is not present 
        alert.showAlertDialog(TwitterLoginActivity.this, "Twitter oAuth tokens", 
            "Please set your twitter oauth tokens first!", false); 
        return; 
      } 

      tv = (TextView) findViewById(R.id.welcome_txt); 
      loginBtn = (Button) findViewById(R.id.login_btn); 
      logo = (ImageView) findViewById(R.id.imageView1); 
      mSharedPreferences = getApplicationContext().getSharedPreferences("MyPref", 
          0); 

      loginBtn.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
          Thread th = new Thread(new Runnable() { 
            public void run() { 
              loginToTwitter(); 
            } 
          }); 
          th.start(); 

        } 
      }); 

      if (!isTwitterLoggedInAlready()) { 
        Uri uri = getIntent().getData(); 
        if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { 
          uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); 

          try { 

            AccessToken accessToken = twitter.getOAuthAccessToken(requestToken); 
            Editor e = mSharedPreferences.edit(); 
            e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); 
            e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret()); 
            e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); 
            e.commit(); 

            Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); 

          } 
          catch (Exception e) { 
            Log.e("Twitter Login Error", "> " + e.getMessage()); 
          } 
        } 
      } 

    } 

    public void loginToTwitter() { 
      if (!isTwitterLoggedInAlready()) { 
        ConfigurationBuilder builder = new ConfigurationBuilder(); 
        builder.setOAuthConsumerKey(CONSUMER_KEY); 
        builder.setOAuthConsumerSecret(CONSUMER_SECRET); 
        Configuration configuration = builder.build(); 
        TwitterFactory factory = new TwitterFactory(configuration); 
        twitter = factory.getInstance(); 
        try { 
          requestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL); 
          this.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
              .parse(requestToken.getAuthenticationURL()))); } 
          }); 

        } 
        catch (TwitterException e) { 
          e.printStackTrace(); 
        } 
      } 
        Intent intent = new Intent(TwitterLoginActivity.this, TweetsListActivity.class); 
        intent.putExtra("tweetsdata",tweetsData); 
        startActivity(intent); 

        finish();    } 


    private boolean isTwitterLoggedInAlready() { 
      return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false); 
    } 

    @Override 
    protected void onResume() { 
      super.onResume(); 

    } 

} 
+0

发布您的代码。你正在使用基于对话框或基于webview的认证? –

+0

代码在哪里? –

+0

这里是代码http://pastebin.com/PGYiUhd0 – Nidhi

回答

0

将这个代码是在的onCreate()来的onResume()与我的变化结束:

Uri uri = getIntent().getData(); 
if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { 
    uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); 

    try { 
     AccessToken accessToken = twitter.getOAuthAccessToken(requestToken); 
     Editor e = mSharedPreferences.edit(); 
     e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); 
     e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret()); 
     e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); 
     e.commit(); 

     Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); 
    } 
    catch (Exception e) { 
     Log.e("Twitter Login Error", "> " + e.getMessage()); 
    } 
} 

if (!isTwitterLoggedInAlready()) { 
    // Goto TweetsListActivity 
    Intent intent = new Intent(TwitterLoginActivity.this, TweetsListActivity.class); 
    intent.putExtra("tweetsdata",tweetsData); 
    startActivity(intent); 
    finish(); 
} 

而且请注意,在第127-128行的代码中,这些行被切换:

 startActivity(intent); 
    intent.putExtra("tweetsdata",tweetsData); 

开始活动后,没有意义改变意图。

编辑:

也注意到这个代码startActivity()之后的网络登录,即不作任何意义:

TwitterLoginActivity.this.runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     Intent intent = new Intent(TwitterLoginActivity.this, 
       TweetsListActivity.class); 
     intent.putExtra("tweetsdata",tweetsData); 
     startActivity(intent); 
     finish(); 
    } 
}); 

中删除此代码。

+0

它只是在点击按钮时将第一个活动移动到另一个活动。登录页面在这里不起作用 – Nidhi

+0

你试过了吗? –

+0

是的,我试过这个。 – Nidhi

相关问题