Reputation: 2692
I have a simple login button in layout file:
<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"
/>
I have added AppID
to manifest file too.
This is my activity class.
public class Login extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
}
I have correctly referenced FacebookSDK project. Yet I get the following error:
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
Can anyone help?
Upvotes: 0
Views: 517
Reputation: 4069
// 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" />
Upvotes: 2
Reputation: 2692
I was about to start a bounty and I was checking HelloFacebookSample and decided to give it a try.
I was putting my app id as this:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="MY_APP_ID"/>
but what it should have been:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
I never thought this could create such an error. They should put this as warning in their tutorial I guess!
Upvotes: 1