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

Gya*_*thi 0 android facebook onactivityresult

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

代码:LoginAcitivity.java

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

                startActivityForResult(intent,2);
Run Code Online (Sandbox Code Playgroud)

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

        }
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

}

Gya*_*thi 6

终于我找到了解决方案,我从头开始进行另一项活动,然后慢慢地复制了新活动,直到它与即将发生的活动相匹配为止。简而言之,除了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>
Run Code Online (Sandbox Code Playgroud)