我想将登录按钮添加到我的应用程序中,所以我按照facebook的指南进行操作。我创建了我的应用程序项目,我添加了一个android项目,告诉包的名称和mainactivity的路径以及从默认密钥库生成的哈希代码(我用它们告诉我android调试密钥库,因为目前应用程序是仅在alfa测试中,因此出于个人发展原因,我更喜欢使用android studio生成的调试版本。然后我将字符串资源放入应用程序ID,并在标签应用程序中输入带有facebook app id的元数据作为指南。然后我也设置了环境:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
/**
*
*
* part dedicated to facebook button
*/
manager=CallbackManager.Factory.create();
setContentView(R.layout.activity_main);
loginButton=(LoginButton)findViewById(R.id.facebook_logi);
loginButton.setReadPermissions("email");
loginButton.registerCallback(manager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.i("Facebook","Login success");
}
@Override
public void onCancel() {
Log.i("Facebook","Login cencelled");
}
@Override
public void onError(FacebookException error) {
Log.i("Facebook","Login error "+error.getMessage());
}
});
/**
*
*
* end of facebook part
*/
当我尝试运行它时,VM会生成此异常
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746)
at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:774)
at com.facebook.internal.FetchedAppSettingsManager.queryAppSettings(FetchedAppSettingsManager.java:147)
at com.facebook.login.widget.LoginButton$1.run(LoginButton.java:499)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
任何人都可以帮助我因为我在这里搜索类似的问题,但我只找到了人们在应用程序标签之外用facebook_app_id推送meda数据的人。感谢所有人。
答案 0 :(得分:0)
你的元标记应该在Manifest中的应用程序标记内:
<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">
<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/facebook_app_id"/>
</application>
此外,如果你使用自定义登录按钮;
将此添加到您的布局:
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
在你的活动中
loginButton=(LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions("email");
loginButton.registerCallback(manager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.i("Facebook","Login success");
}
@Override
public void onCancel() {
Log.i("Facebook","Login cencelled");
}
@Override
public void onError(FacebookException error) {
Log.i("Facebook","Login error "+error.getMessage());
}
});
现在只需在用户点击您的自定义login button
button
即可
public void onClick(View v) {
if (v == facebook_logi) {
loginButton.performClick();
}
}