Android应用程序崩溃与Facebook登录

时间:2014-12-21 23:38:01

标签: android facebook

我对facebook登录的实施存在问题。当调用登录片段时,应用程序崩溃。我读了很多关于这方面的问题,但他们的答案对我不起作用。

这是我的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">

    <Button
        android:id="@+id/bLoginAccedi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Accedi"
        android:layout_marginTop="70dp"
        android:layout_alignTop="@+id/bFacebookAccedi"
        android:layout_alignLeft="@+id/bFacebookAccedi"
        android:layout_alignRight="@+id/bFacebookAccedi"
        android:layout_alignStart="@+id/bFacebookAccedi" />

    <com.facebook.widget.LoginButton
        xmlns:fb="http://schemas.android.com/apk/res-auto"
        android:id="@+id/bFacebookAccedi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="150dp"
        fb:login_text="Accedi con Facebook"
        />
</RelativeLayout>

这是我的LoginFragment:

    public class LoginFragment extends Fragment {

    private View parentView;
    private ResideMenu resideMenu;
    private Button bLoginAccedi;
    private LoginButton bFacebookAccedi;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        parentView = inflater.inflate(R.layout.login, container, false);
        setUpViews();

        ActionBar actionBar = getActivity().getActionBar();
        actionBar.show();
        actionBar.setTitle("Log in");
        actionBar.setDisplayHomeAsUpEnabled(true);

        bFacebookAccedi = (LoginButton) parentView.findViewById(R.id.bFacebookAccedi);
        bLoginAccedi = (Button) parentView.findViewById(R.id.bLoginAccedi);

        bFacebookAccedi.setBackgroundColor(getResources().getColor(R.color.turquoise));

        bLoginAccedi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getActivity(), Accesso.class);
                startActivity(i);
            }
        });

        return parentView;
    }

    private void setUpViews() {
        MainActivity parentActivity = (MainActivity) getActivity();
        resideMenu = parentActivity.getResideMenu(); }

}

我的清单:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.facebook.sdk.ApplicationId "
            android:value="@string/facebook_app_id"/>
        <activity
            android:name="discontinuity.it.agency1.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="discontinuity.it.agency1.ConfermaFB"
            android:label="@string/title_activity_conferma_fb"
            android:screenOrientation="portrait">
        </activity>
        <activity
            android:name="discontinuity.it.agency1.Accesso"
            android:label="@string/title_activity_accesso"
            android:screenOrientation="portrait">
        </activity>

    </application>

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

</manifest>

我在logcat中发现了这个错误:

java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.NullPointerException
        at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:911)
        at com.facebook.internal.Utility.queryAppSettings(Utility.java:673)
        at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:678)
        at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:675)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

似乎错过了应用ID,但我已经将其放入带有元数据的清单中。 那我的问题是什么?

2 个答案:

答案 0 :(得分:1)

你似乎有一个额外的空间:

android:name="com.facebook.sdk.ApplicationId "

答案 1 :(得分:1)

我只是将此代码添加到我的Manifest.xml,问题就解决了:

   .
   .
   .
 </activity>

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

</application>
</manifest>

和我的strings.xml

<string name="facebook_app_id">012345678901234</string>
相关问题