繁体   English   中英

注销后,AsyncTask和Handler始终启动两次活动

[英]AsyncTask and Handler always Start Activity twice after Logout

退出一次后,我无法将fbid发送到我的服务器。 如果我想再次登录,它总是发送两次请求,并两次启动活动。

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

有一次我被困在类似的情况下,Activity接连两次打电话。

为了避免这种情况,经过大量研究,我找到了一个非常简单的解决方案。

可能解决方案不是完美的,但对我有用

在manifest.xml文件中

在您的活动中只需添加

android:launchMode="singleTask"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM