2016-03-29 13 views
3

Ich versuche, ‚Mit Facebook Login‘ Funktion meiner App hinzufügen, und ich bin mit Blick auf die folgenden FragenAnmeldung mit Facebook auf Android

  1. Wenn ich Facebook Login, um XML hinzufügen, erhalte ich Rendering-Probleme (das geht weg, wenn ich das Layout aufzufrischen, aber auch hier erscheint ein Weiß-Bildschirm wie unten) Code:
    <TextView android:id="@+id/btnLogin" android:layout_width="wrap_content" android:layout_height="31dp" android:layout_gravity="center" android:layout_marginLeft="175dp" android:text="Login With Facebook" android:backgroundTint="#948b8b" /> <com.facebook.login.widget.LoginButton android:id="@+id/loginButton" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

Screen Rendering

  1. Wenn ich versuche, meine App zu starten, bekomme ich die folgende Stack Trace in der Konsole.

Ich bin neu in Android und konnte die Probleme nicht lösen. Deine Hilfe ist sehr Willkommen. Code:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); if(PrefUtils.getCurrentUser(LoginActivity.this) != null){ Intent homeIntent = new Intent(LoginActivity.this, MainActivity.class); startActivity(homeIntent); finish(); } }

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.batman.eventmanager, PID: 2111 java.lang.ExceptionInInitializerError at java.lang.reflect.Constructor.newInstance(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:288) at android.view.LayoutInflater.createView(LayoutInflater.java:607) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378) at android.app.Activity.setContentView(Activity.java:2145) at com.example.batman.eventmanager.LoginActivity.onCreate(LoginActivity.java:33) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 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.newInstance(Native Method)  at java.lang.reflect.Constructor.newInstance(Constructor.java:288)  at android.view.LayoutInflater.createView(LayoutInflater.java:607)  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)  at android.view.LayoutInflater.inflate(LayoutInflater.java:504)  at android.view.LayoutInflater.inflate(LayoutInflater.java:414)  at android.view.LayoutInflater.inflate(LayoutInflater.java:365)  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)  at android.app.Activity.setContentView(Activity.java:2145)  at com.example.batman.eventmanager.LoginActivity.onCreate(LoginActivity.java:33)  at android.app.Activity.performCreate(Activity.java:5990)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387 at android.app.ActivityThread.access$800(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

  1. Unten ist mein Manifest XML `

    <activity 
        android:name=".LoginActivity" 
        android:label="@string/app_name"> 
        <intent-filter> 
         <action android:name="android.intent.action.MAIN" /> 
    
         <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    
    <activity 
        android:name=".MainActivity" 
        android:label="@string/app_name" 
        android:theme="@style/AppTheme.NoActionBar"> 
        <intent-filter> 
         <action android:name="com.example.batman.eventmanager.MainActivity" /> 
    
         <category android:name="android.intent.category.DEFAULT" /> 
        </intent-filter> 
    </activity> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 
    
    <activity android:name="com.facebook.FacebookActivity" 
        android:configChanges= 
         "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar" 
        android:label="@string/app_name" /> 
    

    ` TIA

+0

warum Sie setzen android: Sichtbarkeit = „gone“ einzuloggen Taste – Pavya

+0

Weil ich die Textview als bin mit Button und nicht wollen, dass das Facebook Button Widget auf dem Bildschirm herumliegen – Spark

+1

Suchen Sie nach Bearbeiten meiner Antwort, möglicherweise wird es hilfreich sein. Vielen Dank. –

Antwort

3

Sie müssen die Facebook sdk vor setContentView()

unten Code vor setContentView setzen initialisieren();

 FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
1

java.lang.ExceptionInInitializerError bei java.lang.reflect.Constructor.newInstance(Native Method) zeigt, dass Sie die Facebook-SDK nicht initialisiert wurde. Gehen Sie folgendermaßen vor, um diese Ausnahme zu beheben.

public class LoginActivity extends FragmentActivity { 

    private ConnectionDetector cd; 
    LoginFragment loginFragment;  

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      FacebookSdk.sdkInitialize(this.getApplicationContext()); 
      if (savedInstanceState == null) { 

        loginFragment = new LoginFragment(); 
        getSupportFragmentManager() 
          .beginTransaction() 
          .add(android.R.id.content, loginFragment) 
          .commit(); 
       } else { 

        loginFragment = (LoginFragment) getSupportFragmentManager() 
          .findFragmentById(android.R.id.content); 
       } 
      } 

Danach nehmen Sie ein neues Fragment LoginFragment und fügen Sie alle Funktionen hier:

public class LoginFragment extends android.support.v4.app.Fragment { 

    LoginButton loginButton; 
    CallbackManager callbackManager; 

    public LoginFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     callbackManager = CallbackManager.Factory.create(); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootview= inflater.inflate(R.layout.activity_login, container, false); 

     loginButton = (LoginButton) rootview.findViewById(R.id.login_button); 
     loginButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 
     loginButton.setReadPermissions("public_profile", "email", "user_about_me"); 
     // If using in a fragment 
     loginButton.setFragment(this); 

      } 
} 
Verwandte Themen