I have integrated Facebook and created app in Facebook developer account. I have registerd FBHelper activity in facebook developer account, Once i received data/facebook details , i used setResult method but it is not calling the onActivityResult() method of LoginActivity.java.
code: LoginAcitivity.java
Intent intent = new Intent(LoginActivity.this, FBHelper.class);
startActivityForResult(intent,2);
onActivityResult() of LoginActivity.java
@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();
}
}
Finally i got the solution, I started from scratch with another Activity and slowly duplicated the new activity till it matched the one that was breaking. In short, it was nothing to do with the Activity but the Android Manifest.
In my Android Manifest, I had android:noHistory="true" on my LoginActivity which was crashing my app. Once I removed it then it worked again.
<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>