Java Facebook SDK-登录后不会发生任何事情
目前创建了一个Facebook登录按钮,我现在正试图在成功登录时重定向到一个新的活动。为此,我当然使用onSucces()函数 但是,当我在应用程序上单击login时,它会加载,但不会发生任何事情。它停留在登录页面 我的登录活动代码:Java Facebook SDK-登录后不会发生任何事情,java,android,Java,Android,目前创建了一个Facebook登录按钮,我现在正试图在成功登录时重定向到一个新的活动。为此,我当然使用onSucces()函数 但是,当我在应用程序上单击login时,它会加载,但不会发生任何事情。它停留在登录页面 我的登录活动代码: package com.example.frederik.testpleasework; import android.app.Activity; import android.content.Intent; import android.os.Bundle;
package com.example.frederik.testpleasework;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
public class LoginActivity extends Activity {
LoginButton login;
TextView info;
CallbackManager callbackManager;
//Creating and initializing the feature(Code from Facebook install guide)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext()); //Calls for the facebook feature
callbackManager = CallbackManager.Factory.create(); //Initializing callback, checking login result
setContentView(R.layout.content_main);
info = (TextView) findViewById(R.id.info);
login = (LoginButton) findViewById(R.id.login_button);
login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Intent i = new Intent(LoginActivity.this, LandingActivity.class);
startActivity(i);
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
}
}
我假设错误在这些类中的某个地方,但是如果您需要来自其他代码部分的更多信息,请随时请求
编辑,androidmanifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.frederik.testpleasework" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
</activity>
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name=".LoginActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/fbid" />
<uses-permission android:name="android.permission.CAMERA" />
//Requests permission to use the camera
<uses-feature android:name="android.hardware.camera" />
//A device NEEDS to have a camera to install the app
<activity
android:name=".LandingActivity"
android:label="@string/title_activity_landing"
android:theme="@style/AppTheme.NoActionBar" >
</activity>
</application>
</manifest>
//请求使用相机的权限
//设备需要有摄像头才能安装应用程序
mButtonLogin.registerCallback(回调管理器,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
handlePendingAction();
GraphRequest请求=GraphRequest.newmereRequest(
loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
Log.v(“LoginActivity”,response.toString());
试一试{
意图i=新意图(LoginActivity.this、LandingActivity.class);
星触觉(i);
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
});
request.executeAsync();
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常){
}
});
尝试在登录活动中添加此代码。来自Facebook官方文档。 使用方法
doFBLogin
进行登录和获取基本配置文件
// Write only required permissions
private String[] PERMISSION = new String[]{"user_photos", "email",
"user_about_me", "public_profile", "user_about_me", "user_friends",
"user_likes", "user_hometown",
"user_education_history", "user_work_history", "user_birthday"};
private CallbackManager callbackmanager;
private String strFirstname;
private String strLastname;
private String strEmail;
private String strProfilePhoto;
private String strGender;
private void doFBLogin() {
callbackmanager = CallbackManager.Factory.create();
// Set permissions
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(PERMISSION));
LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject json,
GraphResponse response) {
if (response.getError() != null) {
new ShowToast(SplashScreen.this, getResources().getString(R.string.failed_login));
} else {
try {
strFirstname = json.getString("first_name") + " " + json.getString("last_name");
strLastname = json.getString("last_name");
strEmail = json.getString("email");
strProfilePhoto = json.getJSONObject("picture").getJSONObject("data").getString("url");
strGender = json.getString("gender");
} catch (JSONException e) {
}
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,first_name,last_name,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
new ShowToast(SplashScreen.this, getResources().getString(R.string.failed_login));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackmanager.onActivityResult(requestCode, resultCode, data);
}
第一步,初始化facebook sdk:
FacebookSdk.sdkInitialize(this.getApplicationContext());
第二步,创建回拨管理器:
CallbackManager callbackManager = CallbackManager.Factory.create();
第三步,添加读取权限:
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
下一步,注册回拨:
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});
试试这个代码,希望对你有帮助。你可以参考。你的
AndroidManifest.xml
看起来怎么样?@MukulGoel添加了它=)一旦你点击“使用facebook登录”,facebook按钮是否会变为“注销”?@DroidAks不会。我成功登录,它返回到登录按钮。所以我想是的working@Stenberg是否已在AndroidManifest文件中添加权限?已尝试添加代码。Getting无法解析sybol“mButtonLogin”,我是否应该按照上面代码中的定义将其更改为“login”?也无法解析方法“handlePendingAction()”。最后,异常“org.json.JSONException”从未被抛出到响应错误的try块中。尽管删除handlePending行,仍然会出现handlePending和JSONE错误。是的,您需要添加internet权限。使用您的方法不会改变任何结果
CallbackManager callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}