Profile.getCurrentProfile()在登录后返回null

时间:2016-03-24 20:29:59

标签: android facebook android-studio facebook-sdk-4.0

只要安装了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");
        }

    });

}

0 个答案:

没有答案