繁体   English   中英

在Android中使用Facebook登录时未调用onActivityResult

[英]onActivityResult is not calling while using facebook login in android

我已经整合了Facebook,并在Facebook开发者帐户中创建了应用。 我已经在Facebook开发者帐户中注册了FBHelper活动,一旦接收到数据/ facebook详细信息,就使用了setResult方法,但它没有调用LoginActivity.java的onActivityResult()方法。

代码:LoginAcitivity.java

 Intent intent = new Intent(LoginActivity.this, FBHelper.class);

                startActivityForResult(intent,2);

LoginActivity.java的onActivityResult()

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);


       if (requestCode == 2 && resultCode == RESULT_OK) {

            String jsondata=data.getStringExtra("userProfile");
            try {


                JSONObject response = new JSONObject(jsondata);
                String email = (response.get("email").toString());
                String fname = (response.get("first_name").toString());
                String lname = (response.get("last_name").toString());
                String id = (response.get("id").toString());
                Toast.makeText(loginActivity,"facebook", Toast.LENGTH_SHORT).show();
                Social_Login(email, id, fname, lname, "facebook");

            } catch(Exception e){
                e.printStackTrace();
            }

        }
}

FBHelper.java

public class FBHelper extends AppCompatActivity {
CallbackManager callbackManager;
private CallbackManager mFacebookCallbackManager;
private Context myActivity;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fb_helper);
    try {
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
        callbackManager = CallbackManager.Factory.create();
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
       LoginManager.getInstance().logOut();
        LoginManager.getInstance().logInWithReadPermissions(FBHelper.this, Arrays.asList("public_profile", "email"));
        LoginManager.getInstance().setLoginBehavior(LoginBehavior.DEVICE_AUTH);


        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                getUserDetails(loginResult);
            }

            @Override
            public void onCancel() {
                // App code
                Log.v("onCancel", "onCancel");
            }

            @Override
            public void onError(FacebookException exception) {
                // App code
                exception.printStackTrace();
                Log.v("onError", "CANCEL");
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        callbackManager.onActivityResult(requestCode, resultCode, data);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

protected void getUserDetails(LoginResult loginResult) {
    GraphRequest data_request = GraphRequest.newMeRequest(
            AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(
                        JSONObject json_object, GraphResponse response) {
                    try {
                        Intent returnIntent = new Intent();
                        returnIntent.putExtra("userProfile", json_object.toString());
                        setResult(RESULT_OK, returnIntent);
                       // LoginManager.getInstance().logOut();
                        finish();
                    } catch (Exception e) {

                        e.printStackTrace();
                    }

                }

            });
    try {
        Bundle permission_param = new Bundle();
        permission_param.putString("fields", "id,name,email,picture.width(120).height(120)");
        data_request.setParameters(permission_param);
        data_request.executeAsync();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

protected void onResume() {
    super.onResume();
    // Logs 'install' and 'app activate' App Events.
    AppEventsLogger.activateApp(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Logs 'app deactivate' App Event.
    AppEventsLogger.deactivateApp(this);
}


@Override
protected void onDestroy() {
    super.onDestroy();
    //LoginManager.getInstance().logOut();
}

}

终于我找到了解决方案,我从头开始进行另一项活动,然后慢慢地复制了新活动,直到它与即将发生的活动相匹配为止。 简而言之,除了Android Manifest之外,这与Activity无关。

在我的Android清单中,我的LoginActivity上有android:noHistory =“ true”,这使我的应用程序崩溃了。 一旦我删除它,然后它又可以工作了。

<activity
            android:name=".Activity.General.LoginActivity"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

请尝试从FBHelper.java中删除onActivityResult方法

暂无
暂无

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

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