繁体   English   中英

Android fb sdk错误

[英]android fb sdk error

我在布局文件中有一个简单的登录按钮:

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

我也将AppID添加到清单文件中。

这是我的活动课。

public class Login extends FragmentActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

    }
}

我已经正确引用了FacebookSDK项目。 但是我得到以下错误:

06-03 12:38:25.685: E/AndroidRuntime(828): java.lang.RuntimeException: An error occured while executing doInBackground()
06-03 12:38:25.685: E/AndroidRuntime(828):  at android.os.AsyncTask$3.done(AsyncTask.java:278)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-03 12:38:25.685: E/AndroidRuntime(828):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.lang.Thread.run(Thread.java:856)
06-03 12:38:25.685: E/AndroidRuntime(828): Caused by: java.lang.NullPointerException
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:781)
06-03 12:38:25.685: E/AndroidRuntime(828):  at com.facebook.internal.Utility.queryAppSettings(Utility.java:372)
06-03 12:38:25.685: E/AndroidRuntime(828):  at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:676)
06-03 12:38:25.685: E/AndroidRuntime(828):  at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:1)
06-03 12:38:25.685: E/AndroidRuntime(828):  at android.os.AsyncTask$2.call(AsyncTask.java:264)
06-03 12:38:25.685: E/AndroidRuntime(828):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-03 12:38:25.685: E/AndroidRuntime(828):  ... 5 more

有人可以帮忙吗?

// Go through this example of integrating facebook in android.

// Activity: MainActivity.java
package com.example.facebook;

import java.util.Arrays;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.facebook.FacebookException;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.OnErrorListener;

public class MainActivity extends Activity {

    private String TAG = "FacebookLogin";   

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);         
        setContentView(R.layout.activity_main);

        LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
        authButton.setOnErrorListener(new OnErrorListener() {

           @Override
           public void onError(FacebookException error) {              
               Log.e(TAG + "Faceebook", "Error " + error.getMessage());
           }
          });

          // set permission list to read user details
          authButton.setReadPermissions(Arrays.asList("basic_info","email","user_birthday"));

          // session state call back event
          authButton.setSessionStatusCallback(new Session.StatusCallback() {

               @Override
               public void call(Session session, SessionState state, Exception exception) {

                if (session.isOpened()) {

                         Log.i(TAG,"Access Token"+ session.getAccessToken());
                         Log.i(TAG + " Facebook Session", "Session opened");

                        Request.executeMeRequestAsync(session,
                                    new Request.GraphUserCallback() {

                                        @Override
                                        public void onCompleted(GraphUser user,Response response) {
                                              if (user != null) {                                          

                                               String first_name = user.getFirstName();
                                               String last_name = user.getLastName();                                                  
                                               String gender = user.getProperty("gender").toString();                                                  
                                               String email = user.asMap().get("email").toString();
                                               String fb_id = user.getId();
                                               String birthday = user.getBirthday();

                                               Log.i(TAG, "first_name "+ first_name);
                                               Log.i(TAG, "last_name "+ last_name);
                                               Log.i(TAG, "gender "+ gender);
                                               Log.i(TAG, "email "+ email);
                                               Log.i(TAG, "fb_id "+ fb_id);
                                               Log.i(TAG, "birthday "+ birthday);

                                               new facebookRegister().execute();

                                               }
                                      }
                                  });
                      }
                else {
                    Log.i(TAG + " Facebook Session", "Session closed");                     
                }

               }
              });
    }

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

// Layout: activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FacebookActivity"   >

    <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

// Add the following permission in your manifest.xml
<uses-permission android:name="android.permission.INTERNET"/>

// Add the following code in your manifest.xml in the application tag.
// Replace YOUR_FB_APP_ID with your facebook app id.
<activity android:name="com.facebook.LoginActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

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

我正要开始赏金,我正在检查HelloFacebookSample,并决定尝试一下。

我将我的应用ID设置为:

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

但是应该是这样的:

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

我从没想过这会造成这样的错误。 我猜他们应该在教程中将此作为警告!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM