J'ai essayé d'obtenir une connexion Facebook (à côté de G + connexion) fonctionnant sur mon application. G + fonctionne bien, et maintenant j'ai décidé d'ajouter l'intégration de Facebook.Facebook Android SDK applicationId provoquant NPE
J'ai l'ID d'application de facebook, et ont prévu que dans le manifeste comme si:
<meta-data
android:name="com.facebook.skd.ApplicationId"
android:value="@string/app_id" />
Voici la ressource de chaîne:
<string name="app_id">000000000000000</string>
Et voici mon code d'activité de connexion, avec des censeurs sur les informations appropriées. Je ne comprends pas pourquoi il y a une exception NullPointerException sur la ligne Session.openActiveSession
dans la section Facebook, indiquant que "Argument 'applicationId" ne peut pas être nulle. This link vous fournira l'information LogCat.Je suis extrêmement nouveau pour le développement Android et encore plus de nouveau à . travailler avec Facebook, juste FYI
package com.example.example;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.android.Facebook;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.plus.PlusClient;
import com.google.android.gms.plus.model.people.Person;
public class LoginActivity extends Activity implements View.OnClickListener, ConnectionCallbacks, OnConnectionFailedListener{
public static final String PREFS_NAME = "MyPrefsFile";
public static Boolean mFirstTimeUsingApp = true;
private static final String TAG = LoginActivity.class.getSimpleName();
//Google Plus Member Variables
protected static final int REQUEST_CODE_RESOLVE_ERR = 9000;
protected PlusClient mPlusClient;
protected ConnectionResult mPlusConnectionResult;
protected ProgressDialog mPlusConnectionProgressDialog;
protected int SIZE_WIDE = 1;
//Facebook Member Variables
private static final String APP_ID = "000000000000000";
private Facebook mFacebook;
private ProgressDialog mFacebookProgress;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences mSharedPreferences = getSharedPreferences(PREFS_NAME, 0);
boolean firstTimeUsingapp = mSharedPreferences.getBoolean("firstTimeUsingApp", true);
mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity").build();
if (firstTimeUsingapp == true) {
setContentView(R.layout.activity_login);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
/*-------------------------------------*/
/*----------Google Plus Login----------*/
/*-------------------------------------*/
SignInButton btnSignInGooglePlus = (SignInButton) findViewById(R.id.google_plus_sign_in_button);
btnSignInGooglePlus.setSize(SIZE_WIDE);
findViewById(R.id.google_plus_sign_in_button).setOnClickListener(this);
//Button btnSignOutGooglePlus = (Button) findViewById(R.id.sign_out);
Log.v(TAG, "5");
Log.v(TAG, "6");
//mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity").build();
//Progress bar to be displayed if the connection failure is not resolved.
mPlusConnectionProgressDialog = new ProgressDialog(this);
mPlusConnectionProgressDialog.setMessage("Signing in...");
/*-------------------------------------*/
/*-----------Facebook Login------------*/
/*-------------------------------------*/
mFacebookProgress = new ProgressDialog(this);
LoginButton mFacebookButton = (LoginButton) findViewById(R.id.facebook_sign_in_button);
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
});
/*-------------------------------------*/
/*------------Twitter Login------------*/
/*-------------------------------------*/
//TODO
/*-------------------------------------*/
/*----------Site Account Login---------*/
/*-------------------------------------*/
//TODO
}
else {
setContentView(R.layout.activity_login_pending);
Log.v(TAG, "99");
}
}
@Override
protected void onStart() {
Log.v(TAG, "onStart called");
super.onStart();
Log.v(TAG, "super.onStart called");
if (mPlusClient.isConnected() == false) {
mPlusClient.connect();
}
Log.v(TAG, "mPlusClient connected");
}
@Override
protected void onStop() {
super.onStop();
mPlusClient.disconnect();
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if(mPlusConnectionProgressDialog.isShowing()) {
if (result.hasResolution()) {
try {
result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
} catch (SendIntentException e){
mPlusClient.connect();
}
}
}
mPlusConnectionResult = result;
}
@Override
public void onConnected(Bundle arg0) {
if (mPlusConnectionProgressDialog != null) {
if (mPlusConnectionProgressDialog.isShowing() == true) {
mPlusConnectionProgressDialog.dismiss();
}
}
Person person = mPlusClient.getCurrentPerson();
String userID = person.getId();
SharedPreferences sharedPreferences = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("userID", userID);
editor.commit();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onDisconnected() {
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
mPlusConnectionResult = null;
mPlusClient.connect();
}
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.google_plus_sign_in_button && !mPlusClient.isConnected()) {
if (mPlusConnectionResult == null) {
mPlusConnectionProgressDialog.show();
} else {
try {
mPlusConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
} catch (SendIntentException e) {
//Try connecting again.
mPlusConnectionResult = null;
mPlusClient.connect();
mPlusClient.disconnect();
}
}
} else if (view.getId() == R.id.facebook_sign_in_button) /* && not sure what goes here TODO*/ {
}
}
protected void errorLogin() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.error_login_title);
builder.setMessage(R.string.error_login_message);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
Utilisez-vous vraiment ce ' 000000000000000 ' Ressource de chaîne? Ou vous l'avez posté ici comme ceci, pour masquer votre identifiant Real App? –
@SalmanKhakwani Je le cache. – mattcoker
Vous avez implémenté votre propre activité de connexion? S'il vous plaît expliquer le fonctionnement de l'activité de connexion. –