2

Я новичок в Android. Я пытался интегрировать логин FB с моим Android-приложением. Я выполнил все инструкции на developers.facebook.com для этой интеграции. Однако, когда я пытаюсь запустить свое приложение, он падает при запуске.Android App Crashes on Facebook Войти

Обратите внимание, что у меня уже есть идентификатор приложения 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) 
+0

Отправьте код. Опубликуйте исключение сбоя. –

+0

Я уже предоставил полный фрагмент кода, который я использовал для интеграции входа FB в свое приложение для Android. Кроме того, я представил точное и полное исключение, которое я получаю, когда пытаюсь запустить приложение. –

ответ

7

1. Ваша первая ошибка:

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

это бросание FacebookSdkNotInitializedException

Вы должны вызвать FacebookSdk.sdkInitialize(Context)ПЕРЕДsetContentView()

В вашем OnCreate изменении метода Activity в нем к:

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(); 
     } 

Update

2. Вторая ошибка: NullPointerException:

Вы получаете NullPointerException, потому что вы звоните findViewById() перед вызовом setContentView(), так loginButton равно нулю, когда вы звоните loginButton .registerCallback().

Просто переместите вызов setContentView() t о топе: (ваш полный 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 
} 
+1

Спасибо. Это сработало. Имеет смысл. –

+0

приветствую :) сохранить кодировку;) –

+0

Теперь я могу запустить свое приложение. Однако, когда я нажимаю кнопку «Войти с Facebook», она достигает Facebook, но дает мне сообщение об ошибке «App Not Setup: это приложение по-прежнему находится в режиме разработки, и у вас нет доступа к нему. проверить пользователя или попросить администратора приложения для получения разрешений ». У вас есть решение для этого, случайно? –

2

Вам необходимо запустить FacebookSdk.sdkInitiaizeдо того вызова setContentView.