2012-11-27 14 views
0

我退出一次後,發送fbid到我的服務器時出現問題。如果我想再次登錄,它總是發送兩次請求並開始兩次活動。AsyncTask和處理程序始終在註銷後兩次啓動活動

MainActivity.java:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.i("TheGaffer", "ONCREATE"); 
    mFacebook = new Facebook(APP_ID); 
    SessionStore.restore(mFacebook, this); 
    setContentView(R.layout.login_view); 
    mLoginButton = (LoginButton) findViewById(R.id.login); 
    SessionEvents.addAuthListener(new SampleAuthListener()); 
    mLoginButton.init(this, mFacebook); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    mFacebook.authorizeCallback(requestCode, resultCode, data); 
} 
public class SampleAuthListener implements AuthListener { 

    public void onAuthSucceed() { 
     new fbRequest().execute("/user_profiles/registerUser"); 
    } 

    private class fbRequest extends AsyncTask<String, Void, String> { 

     protected void onPreExecute() { 
      progressDialog = ProgressDialog.show(TheGaffer.this , null, 
        "Loading..."); 
     } 

     protected String doInBackground(String... urls) { 
      String fbid = null; 
      Bundle params = new Bundle(); 
      params.putString("fields", "id,name"); 
      try { 
       JSONObject jsonObjSend = new JSONObject(); 
       JSONObject fbData = new JSONObject(mFacebook.request("me", params)); 
       fbid = fbData.getString("id"); 
       jsonObjSend.put("fbid", fbData.getString("id")); 
       jsonObjSend.put("username", fbData.getString("name")); 
       jsonObjSend.put("playerPhoto", "http://graph.facebook.com/"+ fbData.getString("id") +"/picture"); 
       HttpClient.SendHttpPost(urls[0], jsonObjSend); 
      } catch (Exception e) { 
       Log.e("FACEBOOK", "Error parsing data " + e.toString()); 
      } 
      return fbid; 
     } 

     @Override 
     protected void onPostExecute(String fbid) { 
      Toast.makeText(getApplicationContext(), "Login successful", Toast.LENGTH_SHORT).show(); 
      progressDialog.dismiss(); 
      Intent intent = new Intent(TheGaffer.this, TeamActivity.class); 
      intent.putExtra("fbid", fbid); 
      startActivity(intent); 
     } 
    } 

TeamActivity.java:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_create_team: 
     intent = new Intent(TeamActivity.this, CreateTeam.class); 
     return true; 

    case R.id.menu_logout: 
     Log.i("Logout", "Logged out"); 
     Intent intent = new Intent(TeamActivity.this, TheGaffer.class); 
     startActivity(intent); 
     return true; 

    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

回答

1

有一次,我被困在類似的情況下活動兩次電話一個接一個。

經過大量研究,爲了避免這種情況,我找到了一個非常簡單的解決方案。

可能的解決方案是不完美,但在你的活動manifest.xml文件

對我的作品

只需添加

android:launchMode="singleTask" 
+0

那是很好,如果我補充一點,我的表現?我想如果我補充一點,它只是不會運行創建 –

+0

是的,它是好的嘗試添加它什麼喲uget –

+0

接受答案,如果發現有用。 –