在 android 中使用 Facebook 登录时未调用 onActivityResult
onActivityResult is not calling while using facebook login in android
我已经集成了 Facebook 并在 Facebook 开发者帐户中创建了应用程序。我已经在 Facebook 开发者帐户中注册了 FBHelper activity,收到 data/facebook 详细信息后,我使用了 setResult 方法,但它没有调用 LoginActivity.java.
的 onActivityResult() 方法
代码:
LoginAcitivity.java
Intent intent = new Intent(LoginActivity.this, FBHelper.class);
startActivityForResult(intent,2);
onActivityResult() 共 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();
}
}
请尝试从 FBHelper.java
中删除 onActivityResult 方法
最后我找到了解决方案,我从头开始使用另一个 Activity 并慢慢复制新的 activity 直到它与损坏的那个相匹配。简而言之,这与 Activity 无关,而与 Android 清单有关。
在我的 Android 清单中,我的登录 Activity 上有 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>
我已经集成了 Facebook 并在 Facebook 开发者帐户中创建了应用程序。我已经在 Facebook 开发者帐户中注册了 FBHelper activity,收到 data/facebook 详细信息后,我使用了 setResult 方法,但它没有调用 LoginActivity.java.
的 onActivityResult() 方法代码: LoginAcitivity.java
Intent intent = new Intent(LoginActivity.this, FBHelper.class);
startActivityForResult(intent,2);
onActivityResult() 共 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();
}
}
请尝试从 FBHelper.java
中删除 onActivityResult 方法最后我找到了解决方案,我从头开始使用另一个 Activity 并慢慢复制新的 activity 直到它与损坏的那个相匹配。简而言之,这与 Activity 无关,而与 Android 清单有关。
在我的 Android 清单中,我的登录 Activity 上有 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>