使用 facebook 登录按钮停止应用程序

Application is stopped with facebook login button

我想在我的 android 应用程序中实现 facebook 登录,但是当 onCreate 设置布局时我的应用程序崩溃了。

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;
import com.facebook.login.widget.LoginButton;

public class MainActivity extends AppCompatActivity {

    private LoginButton facebookLoginButton;
    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    System.out.println("Prova 1");
    try {
        setContentView(R.layout.activity_main);
    }catch(Exception exc){
        System.out.println("Errore activity "+exc);
    }
    System.out.println("Prova 2");

    FacebookSdk.sdkInitialize(this.getApplicationContext());
    System.out.println("Prova 3");  

    }

}

模块:应用程序build.gradle

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'

    compile 'com.facebook.android:facebook-android-sdk:4.7.0'
}

activity_main.xml

<com.facebook.login.widget.LoginButton
        xmlns:fb="http://schemas.android.com/apk/res-auto"
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />

系统只打印"Prova 1",不知道为什么!

这是清单:

<uses-permission android:name="android.permission.INTERNET"/>
    <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" />

具有 元数据:

<meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>

我的 phone 有 api 19,但应用程序可以使用 15 到 23 api。我也在网上找到的其他应用程序 login-basic 中复制了这段代码,但没有崩溃。

我的错误是什么?有一天我测试了这个但什么都没有,请帮助我! 谢谢!!

-------------------------------------------- -----更新中-----------------

对不起,我已经设置了上网权限。问题是主要构建 setContentView(R.layout.activity_main); 时,我不知道为什么。在 activity_main 中只有 facebook 按钮。另外,我在一个新项目中尝试了这段代码,这就是为什么我把所有东西都放在 main 中的原因。

捕获错误是:I/System.out: Errore android.view.InflateException: Binary XML file line #14: Error inflating class com.facebook.login.widget.LoginButton

首先,我相信您需要互联网连接才能访问 Facebook。但是在你的manifest文件中你没有添加internet权限所以请按如下操作

<uses-permission android:name="android.permission.INTERNET" />

其次,您似乎 运行 在您应用的主线程上进行 Facebook 登录进程,这不是一个好主意。使用异步任务会更好 option.You 可以在 http://developer.android.com/reference/android/os/AsyncTask.html 阅读更多关于它们的信息 除此之外,最好使用 "Try " 和 "Catch" 来防止您的应用程序完全崩溃。它通常具有以下语法

Try

//Block of Code Here

Catch Exception()

我遇到了同样的问题,解决方案是在像这样调用 setContentView 函数之前初始化 facebooksdk。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_main);
}

由于您使用的是 facebook LoginButton,它是一个视图,因此必须在加载 UI 内容之前进行初始化。