Приложението за Android се срива при влизане във Facebook

Нов съм в Android. Опитвах се да интегрирам вход във FB с приложението си за Android. Следвах всички инструкции на developers.facebook.com за тази интеграция. Въпреки това, когато се опитам да стартирам приложението си, то се срива при стартирането.

Моля, имайте предвид, че вече имам идентификатор на приложението Facebook, маркер за мета данни, маркер за активност на android в моя AndroidManifest.xml.

Оформлението е следното:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@drawable/background">

    <RelativeLayout android:id="@+id/container" android:layout_width="match_parent"
        android:paddingBottom="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="20dp"
        android:layout_height="match_parent"
        android:background="#85000000">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/topSocialLoginLayout"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="5dp">

            <com.facebook.login.widget.LoginButton
                android:id="@+id/btnFacebook"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_weight="5"/>

            <com.google.android.gms.common.SignInButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:id="@+id/btnGoogle"
                android:layout_weight="5" />

        </LinearLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:paddingLeft="20dp"
            android:id="@+id/relLayoutMainLogin"
            android:layout_below="@id/topSocialLoginLayout">

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:inputType="textEmailAddress"
                android:layout_alignParentTop="true"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:hint="@string/email"
                android:textColor="#fd9a22"
                android:textCursorDrawable="@drawable/cursor_color"
                android:textColorHint="#ffffff"
                android:id="@+id/txtUser"
                android:background="@drawable/edit_text"
                android:drawableLeft="@drawable/dr_email"
                android:drawablePadding="10dp"
                android:paddingLeft="-3dp"
                android:singleLine="true" />

            <EditText
                android:layout_width="match_parent"
                android:inputType="textPassword"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtUser"
                android:id="@+id/txtPwd"
                android:hint="@string/pwd"
                android:textColor="#fd9a22"
                android:textCursorDrawable="@drawable/cursor_color"
                android:textColorHint="#ffffff"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:background="@drawable/edit_text"
                android:drawableLeft="@drawable/dr_pwd"
                android:drawablePadding="10dp"/>

            <Button
                android:layout_width="match_parent"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="5dp"
                android:layout_below="@id/txtPwd"
                android:layout_height="wrap_content"
                android:text="@string/sign_in"
                android:id="@+id/btnSignIn"
                android:background="@drawable/ainovatheme_btn_default_holo_light"
                android:onClick="login"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/btnSignIn"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#fd9a22"
                android:background="#85000000"
                android:id="@+id/txtLoginErr"
                android:layout_marginBottom="5dp"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_below="@id/txtLoginErr"
                android:text="@string/forgot_pwd"
                android:textColor="#ffffff"
                android:id="@+id/btnForgotPwd"
                android:onClick="forgotPassword"
                style="?android:attr/borderlessButtonStyle"/>

            <ImageView
                android:layout_width="fill_parent"
                android:id="@+id/hrLine"
                android:layout_height="2dp"
                android:layout_below="@id/btnForgotPwd"
                android:background="#d4dce9" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/hrLine"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_centerHorizontal="true"
                android:text="@string/create_account"
                android:textColor="#fd9a22"
                android:id="@+id/btnCreateAccountActivity"
                android:onClick="createAccount"
                style="?android:attr/borderlessButtonStyle" />


        </RelativeLayout>


    </RelativeLayout>

</RelativeLayout>

Следва кодовият фрагмент за моята LoginActivity:

private CallbackManager mCallbackManager;
    private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            try {
                                String email = object.getString("email");
                                Log.d("Output" + "User email ", email);
                                String password = object.toString();
                                Log.d("Output" + "User psw", password);
                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    });
            request.executeAsync();
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException e) {

        }
    };

    // ####### Facebook Sign In Coding - End #######

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        //check for internet connection
        if (!isConnectedToInternet())
        {
            //dialog if internet is not connetd
            createNetErrorDialog();
        }

        FacebookSdk.sdkInitialize(this); // ####### Facebook Sign In Coding
        mCallbackManager = CallbackManager.Factory.create(); // ####### Facebook Sign In Coding
        LoginButton FBloginButton = (LoginButton) findViewById(R.id.btnFacebook); // ####### Facebook Sign In Coding
        FBloginButton.setReadPermissions(Arrays.asList("public_profile, email, user_birthday")); // ####### Facebook Sign In Coding
        FBloginButton.registerCallback(mCallbackManager, mCallback); // ####### Facebook Sign In Coding
}

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }

Следва изключението, което получавам:

java.lang.ExceptionInInitializerError
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
            at android.view.LayoutInflater.createView(LayoutInflater.java:593)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:360)
            at android.app.Activity.setContentView(Activity.java:1932)
            at ainova.jaesa.android.main.LoginActivity.onCreate(LoginActivity.java:97)
            at android.app.Activity.performCreate(Activity.java:5326)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
            at android.app.ActivityThread.access$700(ActivityThread.java:158)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5365)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: null
            at com.facebook.internal.Validate.sdkInitialized(Validate.java:99)
            at com.facebook.FacebookSdk.getCallbackRequestCodeOffset(FacebookSdk.java:735)
            at com.facebook.internal.CallbackManagerImpl$RequestCodeOffset.toRequestCode(CallbackManagerImpl.java:109)
            at com.facebook.login.widget.LoginButton.<clinit>(LoginButton.java:58)
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
            at android.view.LayoutInflater.createView(LayoutInflater.java:593)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:360)
            at android.app.Activity.setContentView(Activity.java:1932)
            at ainova.jaesa.android.main.LoginActivity.onCreate(LoginActivity.java:97)
            at android.app.Activity.performCreate(Activity.java:5326)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
            at android.app.ActivityThread.access$700(ActivityThread.java:158)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5365)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

person Nisarg Patel    schedule 19.04.2015    source източник
comment
Публикувайте кода. Публикувайте изключението за срив.   -  person Jared Burrows    schedule 20.04.2015
comment
Вече предоставих пълния кодов фрагмент, който използвах за интегриране на влизане във FB към моето приложение за Android. Освен това предоставих точното и пълно изключение, което получавам, когато се опитам да стартирам приложението си.   -  person Nisarg Patel    schedule 20.04.2015


Отговори (2)


1. Вашата първа грешка:

     Caused by: null
                at com.facebook.internal.Validate.sdkInitialized(Validate.java:99)

хвърля FacebookSdkNotInitializedException

Трябва да се обадите на FacebookSdk.sdkInitialize(Context) ПРЕДИ setContentView()

В метода onCreate на вашата дейност го променете на:

 protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // here
        FacebookSdk.sdkInitialize(this); // ####### Facebook Sign In Coding
        setContentView(R.layout.login);

        //check for internet connection
        if (!isConnectedToInternet())
        {
            //dialog if internet is not connetd
            createNetErrorDialog();
        }

Актуализация

2. Втора грешка: NullPointerException :

Получавате NullPointerException, защото извиквате findViewById(), преди да извикате setContentView(), така че loginButton е null, когато извиквате loginButton.registerCallback().

Просто преместете извикването на setContentView() to в горната част: (вашият пълен метод oncreate трябва да бъде така):

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

        FacebookSdk.sdkInitialize(this); // ####### Facebook Sign In Coding
        setContentView(R.layout.login);

        //check for internet connection
        if (!isConnectedToInternet())
        {
            //dialog if internet is not connetd
            createNetErrorDialog();
        }

        mCallbackManager = CallbackManager.Factory.create(); // ####### Facebook Sign In Coding
        LoginButton FBloginButton = (LoginButton) findViewById(R.id.btnFacebook); // ####### Facebook Sign In Coding
        FBloginButton.setReadPermissions(Arrays.asList("public_profile, email, user_birthday")); // ####### Facebook Sign In Coding
        FBloginButton.registerCallback(mCallbackManager, mCallback); // ####### Facebook Sign In Coding
}
person Zied R.    schedule 19.04.2015
comment
Сега мога да стартирам приложението си. Въпреки това, когато натисна бутона Вход с Facebook, той стига до Facebook, но ми дава грешка, казваща Приложението не е настроено: Това приложение все още е в режим на разработка и вие нямате достъп до него. Преминете към регистриран тестов потребител или поискайте разрешения от администратор на приложение. Имате ли случайно решение за това? - person Nisarg Patel; 20.04.2015
comment
Мисля, че тъй като приложението ви не е достъпно за всички потребители, трябва да промените настройките на приложението си във facebook.. вижте този отговор, той ще ви помогне stackoverflow.com/a/26135600/2337837 - person Zied R.; 20.04.2015

Трябва да стартирате FacebookSdk.sdkInitiaize преди да извикате setContentView.

person Yauraw Gadav    schedule 19.04.2015