2013-08-30 3 views
-1

트위터 android 링크 된 앱에서 두 가지 활동을 사용하고 있습니다. 첫 번째 활동은 LoginActivity이고 두 번째 활동은 TweetslistActivity입니다. loginActivity에서 버튼을 사용했고 클릭하면 트위터 로그인 대화 상자가 열립니다. 사용자가 성공적으로 로그인하면 내 앱에서 두 번째 활동을 열어야합니다. 하지만 사용자가 인증 된 후 첫 번째 활동이 재개되고 두 번째 활동으로 이동하기 위해 다시 로그인 버튼을 클릭해야합니다!두 번째 활동으로 이동하는 대신 첫 번째 활동을 다시 시작합니다.

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"'를 사용했습니다. 하지만 로그인없이 첫 번째 활동에서 두 번째 활동으로 안내합니다! 나는 막혔지만 어떤 대답도 얻지 못했습니다 .. pls는 좋은 해결책을 제안합니다. 미리 감사드립니다.

편집 :

원래 코드 :

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

코드를 게시하십시오. 대화 또는 웹 기반 인증을 사용하고 있습니까? –

+0

코드는 어디에 있습니까? –

+0

코드는 http://pastebin.com/PGYiUhd0입니다. – Nidhi

답변

0

내 변화 onResume에에서 onCreate()()의 끝에 있었다이 코드를 넣어 : 또한

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); 

활동을 시작한 후에 의도를 변경하는 것은 의미가 없습니다.

편집

:

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(); 
    } 
}); 

이 코드를 제거

이 또한 이해가되지 않는 웹 로그인에 대한이 코드를 startActivity를 한 후(),났습니다.

+0

버튼 클릭시 첫 번째 활동을 다른 활동으로 옮깁니다. 로그인 페이지가 여기에서 작동하지 않습니다 – Nidhi

+0

시도해 보셨습니까? –

+0

예. 나는 이것을 시도했다. – Nidhi

관련 문제