只要安装了Facebook应用程序,登录在我的三星Galaxy S5上运行得非常好。但是当我在没有Facebook应用程序的情况下进行“测试”时,应用程序会在我登录后立即崩溃,并“授权”该应用程序。我已经删除了所有navDrawer代码,并且所有未解决问题的内容都将过期。
这是我的Profile.java类。我正在使用Facebook SDK Android版本4. + in build gradle。
我看不到一个简单的解决方案来解决这个问题 - 并且没有弄清楚如何解决这个问题。这是日志:
Fatal Exception: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {org.my.app/org.my.app.Profile}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.facebook.Profile.getId()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:3974)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4017)
at android.app.ActivityThread.access$1400(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1471)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.facebook.Profile.getId()' on a null object reference
at org.my.app.Profile$2.onSuccess(Profile.java:224)
at org.my.app.Profile$2.onSuccess(Profile.java:173)
at com.facebook.login.LoginManager.finishLogin(LoginManager.java:581)
at com.facebook.login.LoginManager.onActivityResult(LoginManager.java:216)
at com.facebook.login.LoginManager$1.onActivityResult(LoginManager.java:159)
at com.facebook.internal.CallbackManagerImpl.onActivityResult(CallbackManagerImpl.java:82)
at org.my.app.Profile.onActivityResult(Profile.java:316)
at android.app.Activity.dispatchActivityResult(Activity.java:6475)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3970)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4017)
at android.app.ActivityThread.access$1400(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1471)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
这是行崩溃日志告诉我出现了问题:
Line 224 profilePictureView.setProfileId(profile.getId());
Line 173 loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
Line 316 callbackManager.onActivityResult(requestCode, resultCode, data);
这是我的班级 包org.my.app;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.generic.RoundingParams;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.facebook.login.widget.ProfilePictureView;
import com.facebook.share.model.AppInviteContent;
import com.facebook.share.widget.AppInviteDialog;
import org.json.JSONException;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.util.ArrayList;
public class Profile extends Activity {
/**
* Called when the activity is first created.
*/
WebView web;
ArrayList<NavigationDrawerItem> listItems;
DrawerLayout drawerLayout;
ActionBarDrawerToggle drawerToggle;
ListView list;
private LinearLayout DrawerLinear;
private CallbackManager callbackManager;
private ProfilePictureView profilePictureView;
private ProfilePictureView profilePictureViewmenu;
private TextView name;
private TextView namemenu;
private SimpleDraweeView simpleDraweeView;
private SimpleDraweeView simpleDraweeViewmenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
Fresco.initialize(getApplicationContext());
setContentView(R.layout.activity_profile);
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("public_profile", "email", "user_friends");
final com.facebook.Profile profile = com.facebook.Profile.getCurrentProfile();
final ProfilePictureView profilePictureView = (ProfilePictureView) findViewById(R.id.profilepic);
final ProfilePictureView profilePictureViewmenu = (ProfilePictureView) findViewById(R.id.profilepicmenu);
final TextView name = (TextView) findViewById(R.id.name);
final TextView namemenu = (TextView) findViewById(R.id.namemenu);
simpleDraweeView = (SimpleDraweeView) findViewById(R.id.profilePicture);
simpleDraweeViewmenu = (SimpleDraweeView) findViewById(R.id.profilePicturemenu);
final Button button = (Button) findViewById(R.id.invitervenner);
RoundingParams roundingParams = RoundingParams.fromCornersRadius(50f);
roundingParams.setRoundAsCircle(true);
simpleDraweeView.getHierarchy().setRoundingParams(roundingParams);
/// Logged IN \\\
if (profile != null) {
profilePictureView.getProfileId();
profilePictureViewmenu.getProfileId();
profilePictureView.setProfileId(profile.getId());
profilePictureViewmenu.setProfileId(profile.getId());
name.setText(profile.getName());
namemenu.setText(profile.getName());
simpleDraweeView.setImageURI(profile.getProfilePictureUri(100, 100));
simpleDraweeViewmenu.setImageURI(profile.getProfilePictureUri(100, 100));
}
final SharedPreferences sharedPrefs = getSharedPreferences("details", MODE_PRIVATE);
//After referencing your Views, add this.
final String nameStr = sharedPrefs.getString("name", null);
final String nameStrmenu = sharedPrefs.getString("name", null);
final String idStr = sharedPrefs.getString("id", null);
final String idStrmenu = sharedPrefs.getString("id", null);
AccessToken token = AccessToken.getCurrentAccessToken();
if (token != null) {
if (nameStr != null) name.setText(nameStr);
if (nameStrmenu != null) name.setText(nameStrmenu);
if (idStr != null) profilePictureView.setProfileId(idStr);
if (idStrmenu != null) profilePictureViewmenu.setProfileId(idStrmenu);
simpleDraweeView.setImageURI(profile.getProfilePictureUri(100, 100));
simpleDraweeViewmenu.setImageURI(profile.getProfilePictureUri(100, 100));
}
//.. Do the same for other profile data
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (AccessToken.getCurrentAccessToken() != null) {
Log.d("FBTag", "Session is on");
} else {
Log.d("FBTag", "Session is off");
}
//Profile.this.recreate();
name.setText("No facebook user");
namemenu.setText("No facebook user");
profilePictureView.setProfileId(null);
profilePictureViewmenu.setProfileId(null);
Uri placeholderUri = Uri.parse("android.resource://org.my.app/drawable/nofbpic");
simpleDraweeView.setImageURI(placeholderUri);
simpleDraweeViewmenu.setImageURI(placeholderUri);
}
});
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken = loginResult.getAccessToken();
com.facebook.Profile profile = com.facebook.Profile.getCurrentProfile();
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
String id = "";
try {
id = object.getString("id");
} catch (JSONException exe) {
}
String name = "";
try {
name = object.getString("name");
} catch (JSONException exe) {
}
String email = "";
try {
email = object.getString("email");
} catch (JSONException exe) {
}
String gender = "";
try {
gender = object.getString("gender");
} catch (JSONException exe) {
}
Log.v("LoginActivity", response.toString());
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender");
request.setParameters(parameters);
request.executeAsync();
if (AccessToken.getCurrentAccessToken() != null) { //error code #155
profilePictureView.getProfileId();
profilePictureView.setProfileId(profile.getId());
name.setText(profile.getName());
simpleDraweeView.setImageURI(profile.getProfilePictureUri(100, 100));
profilePictureViewmenu.getProfileId();
profilePictureViewmenu.setProfileId(profile.getId());
namemenu.setText(profile.getName());
simpleDraweeViewmenu.setImageURI(profile.getProfilePictureUri(100, 100));
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString("name", profile.getName());
editor.putString("id", profile.getId());
//.. Do the same for other profile data
editor.commit();
}
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
Log.i("Error", "Error");
}
});
}