按Facebook登录按钮后没有任何反应

时间:2015-08-15 10:38:17

标签: android facebook

package com.example.tabv3;

import org.json.JSONException;
import org.json.JSONObject;
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.login.LoginResult;
import com.facebook.login.widget.LoginButton;

import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.Toast;

public class FacebookFragment extends Fragment {

    public static CallbackManager callbackmanager;
    LoginButton lb; 

            public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
                Log.i("FacebookFragment","Called");
                super.onCreate(savedInstanceState);

            }
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        Log.i("FacebookFragment","onCreateview Called");

        View rootView = inflater.inflate(R.layout.facebook_layout, container, false);
        FacebookSdk.sdkInitialize(getActivity());
        callbackmanager = CallbackManager.Factory.create();

        lb=(LoginButton)rootView.findViewById(R.id.login_button);
        lb.setReadPermissions("public_profile", "email", "user_friends");

        lb.registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {

            @Override
            public void onSuccess(LoginResult result) {
                Log.i("TAG", "Facebook login successful.");
                Toast.makeText(getActivity(), "Logged in successfully!", Toast.LENGTH_SHORT).show();

                String token=result.getAccessToken().getToken();
                Log.i("TokenSuccess",token);
                GraphRequest request=GraphRequest.newMeRequest(result.getAccessToken(), new GraphRequest.GraphJSONObjectCallback(){

                        @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                // TODO Auto-generated method stub
                    Log.i("Login ACtivity",response.toString());
                    try
                    {
                        String name=object.getString("name");
                        String email=object.getString("email");
                        String gender=object.getString("gender");
                        String birthday=object.getString("birthday");
                        Log.i("Name"+name,"Gender"+gender+birthday);
                    }
                    catch(JSONException e)
                    {
                    e.printStackTrace();
                    }
                    }
                    }); 
                    Bundle parameters = new Bundle();
                    parameters.putString("fields","name,gender,birthday,email");
                    request.setParameters(parameters);
                    request.executeAsync();
                }//onSuccess End

                    @Override
                    public void onCancel() {
                        Toast.makeText(getActivity(), "Logging in canceled.", Toast.LENGTH_SHORT).show();
                        Log.i("TAG", "Facebook login canceled.");
                    }

                    @Override
                    public void onError(FacebookException error) {
                        Toast.makeText(getActivity(), "Error occurred while logging in. Please try again.", Toast.LENGTH_SHORT).show();
                        Log.i("TAG", "Facebook login error.");
                        Log.e("FAcebbok", "Error", error);
                    }
                });




        return rootView;

         }



    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i("onactivityResult","CALLED");
        super.onActivityResult(requestCode, resultCode, data);
        callbackmanager.onActivityResult(requestCode, resultCode, data);
    }
}

运行此代码的Facebook登录按钮出现,然后当我按下它时,向我显示一个旋转器一秒钟,没有任何反复发生。

我在这里使用Fragment我不想使用FragmentActivity

请建议我缺少的地方。

4 个答案:

答案 0 :(得分:6)

我缺乏一点我解决了

实际上我正在onActivityResult类而不是Fragment类中实现Activity函数,我在其中添加Fragment这个小问题解决了我的问题可能对我有用其他

答案 1 :(得分:0)

你的班级可能没有上下文。当您调用FacebookSdk.sdkInitialize方法时,请确保您拥有当前活动。

FacebookFragment应该有一个像你一样使用的Activity实例 FacebookSdk.sdkInitialize(currentActivity.getApplicationContext())

:d

答案 2 :(得分:0)

如果你的活动没有实现onActivityResult,你就无法使用facebook结果处理,而你登录的Facebook登录回调将无用。

答案 3 :(得分:0)

如果您的onActivityResult在片段内,请使用:

loginButton.setFragment(this);
相关问题