我已经启动了一个拥有Facebook登录功能的应用。所以我整合了facebook sdk并做了以下事情。
Activity.java
public class StartActivity extends FragmentActivity {
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(R.layout.activity_start);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, new LoginFragment())
.commit();
}
}
}
LoginFragment.java
public class LoginFragment extends Fragment implements View.OnClickListener {
private EditText et_userName, et_passWord;
private Button btn_login, btn_register, btn_fb;
private LoginButton loginButton;
private CallbackManager callbackManager;
View rootView;
Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity());
callbackManager = CallbackManager.Factory.create();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.login_fragment, container, false);
et_userName = (EditText) rootView.findViewById(R.id.userName);
et_passWord = (EditText) rootView.findViewById(R.id.passWord);
btn_login = (Button) rootView.findViewById(R.id.loginButton);
btn_register = (Button) rootView.findViewById(R.id.registerButton);
loginButton = (LoginButton) rootView.findViewById(R.id.login_button);
btn_login.setOnClickListener(this);
btn_register.setOnClickListener(this);
mContext = getActivity();
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(mContext, "User ID: " + loginResult.getAccessToken().getUserId() + "\n" + "Auth Token: "
+ loginResult.getAccessToken().getToken(), Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(mContext, "Attempt Cancelled", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException e) {
Toast.makeText(mContext, "Attempt Failed", Toast.LENGTH_SHORT).show();
}
});
return rootView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.loginButton:
Toast.makeText(getActivity(), "LOGIN", Toast.LENGTH_SHORT).show();
break;
case R.id.registerButton:
Toast.makeText(getActivity(), "REGISTER", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
}
当我点击LoginButton时,Facebook登录页面被打开并要求授权,但在我按下确定之后没有任何反应只需返回到片段页面。 当我使用Activity时,这个确切的事情(userId和AccessToken作为Toast并将loginbutton更改为Logout)。我在片段中使用了相同的逻辑。 出了什么问题?帮助
答案 0 :(得分:2)
在包含Activity
的{{1}}中,执行此操作
Fragment
如果您没有引用@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
fragment.onActivityResult(requestCode, resultCode, data);
}
,可以使用
Fragment