wake-up-neo.com

Facebook-Login NullPointerException

Ich versuche, das Facebook-Login für Android mit dem Facebook-SDK (3.17.1) zu implementieren, aber ich habe einige Probleme, die ich in der Vergangenheit nicht gehabt habe ... __ Zuerst wird der Login-Button nicht vollständig dargestellt. Das bekomme ich

enter image description here

an Stelle von:

enter image description here

(Beachten Sie das fehlende Facebook-Logo). Wenn ich die Anwendung starte, wird sie in der Sekunde vor dem Absturz genau so angezeigt, wie sie soll (mit dem Facebook-Logo).

Wenn die Anwendung abstürzt, erhalte ich diese Fehlermeldung 

"Unfortunately, FacebookLoginTest as stopped"

und das in Logcat:

08-12 22:19:08.751: E/AndroidRuntime(7731): FATAL EXCEPTION: AsyncTask #1
08-12 22:19:08.751: E/AndroidRuntime(7731): Process: com.example.facebooklogintest,    PID: 7731
08-12 22:19:08.751: E/AndroidRuntime(7731): Java.lang.RuntimeException: An error   occured while executing doInBackground()
08-12 22:19:08.751: E/AndroidRuntime(7731):     at     Android.os.AsyncTask$3.done(AsyncTask.Java:300)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at  Java.util.concurrent.FutureTask.finishCompletion(FutureTask.Java:355)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at  Java.util.concurrent.FutureTask.setException(FutureTask.Java:222)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at Java.util.concurrent.FutureTask.run(FutureTask.Java:242)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:231)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at   Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1112)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:587)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at  Java.lang.Thread.run(Thread.Java:864)
08-12 22:19:08.751: E/AndroidRuntime(7731): Caused by: Java.lang.NullPointerException
08-12 22:19:08.751: E/AndroidRuntime(7731):     at   Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:911)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at   com.facebook.internal.Utility.queryAppSettings(Utility.Java:377)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.Java:677)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.Java:1)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at Android.os.AsyncTask$2.call(AsyncTask.Java:288)
08-12 22:19:08.751: E/AndroidRuntime(7731):     at Java.util.concurrent.FutureTask.run(FutureTask.Java:237)
08-12 22:19:08.751: E/AndroidRuntime(7731):     ... 4 more
08-12 22:19:10.753: D/Process(7731): killProcess, pid=7731
08-12 22:19:10.753: D/Process(7731):   com.Android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:131    Java.lang.ThreadGroup.uncaughtException:693 Java.lang.ThreadGroup.uncaughtException:690 

Ich habe die Anweisungen zum Hinzufügen von Facebook-Login zu Android-Apps befolgt:

  1. Importierte Facebook-SDK
  2. Facebook-Projekt als Bibliothek hinzugefügt
  3. Facebook-Projekt zur Liste der Referenzen für mein Projekt hinzugefügt
  4. Das Projekt wurde gesäubert und sogar neu gestartet.

Abgesehen davon habe ich nichts an meiner Activity und Manifest ... geändert. Ich habe dies in drei verschiedenen Eclipse-Versionen mit dem gleichen Fehler ausprobiert, aber dann lösche ich den Facebook-Login-Button-Code in der App läuft gut. Nicht sicher, was sonst noch zu tun ist ..__ Hier sind die Codes für MainActivity und Layout.xml:

MainActivity.Java

package com.example.facebooklogintest;

import Android.support.v7.app.ActionBarActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

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


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

activity_main.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.facebooklogintest.MainActivity" >



<com.facebook.widget.LoginButton
    Android:id="@+id/authButton"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentRight="true"
    Android:layout_gravity="center_horizontal"
    Android:layout_marginTop="30dp" />

 </RelativeLayout>
9

Sie müssen dies in Ihrer Manifestdatei ändern oder hinzufügen

 <activity
        Android:name="com.example.LoginActivity"
        Android:label="@string/app_name" 
        Android:parentActivityName="com.example.MainActivity" >


 </activity>
 <activity Android:name="com.facebook.LoginActivity"
              Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
              Android:label="@string/app_name" />
    <meta-data Android:name="com.facebook.sdk.ApplicationId"   Android:value="@string/app_id"/>

Ich kann das nicht anerkennen, der Kredit muss dem Kerl, der die Antwort gepostet hat, gehen. hier Ich füge den Code rein, um Ihnen die Erleichterung zu erleichtern, und weil mir jemand gesagt hat, der die Antwort zuvor gelöscht hat.

20
apmartin1991
10-10 11:27:47.932: E/AndroidRuntime(25915): FATAL EXCEPTION: AsyncTask #5
10-10 11:27:47.932: E/AndroidRuntime(25915): Process: com.example.version_2, PID: 25915
10-10 11:27:47.932: E/AndroidRuntime(25915): Java.lang.NullPointerException: Attempt to invoke virtual method 'int Java.lang.Object.hashCode()' on a null object reference
10-10 11:27:47.932: E/AndroidRuntime(25915):    at Java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.Java:746)
10-10 11:27:47.932: E/AndroidRuntime(25915):    at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:774)
10-10 11:27:47.932: E/AndroidRuntime(25915):    at com.facebook.internal.Utility.queryAppSettings(Utility.Java:822)
10-10 11:27:47.932: E/AndroidRuntime(25915):    at com.facebook.login.widget.LoginButton$1.run(LoginButton.Java:489)

Wenn bei der FB-Integration ein Fehler auftritt, funktioniert die untenstehende Lösung. Fügen Sie einfach die Anwendungs-ID im Metadaten-Tag in der Menifestdatei hinzu. Es wird gut funktionieren

<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>
0
Ashutoshg