facebook登录android app崩溃

时间:2014-03-01 11:15:26

标签: android facebook

代码发布在此处,当点击登录按钮时,如果在homefragment上点击了null指针异常,应用程序崩溃了。在一个beginer.please help.logcat http://postimg.org/image/6d1qyszkd/

简单的facebook类主要是:

 public SimpleFacebook()
{
    mSessionStatusCallback = new SessionStatusCallback();
}

public static void initialize(Activity activity)
{
    if (mInstance == null)
    {
        mInstance = new SimpleFacebook();
    }

    mActivity = activity;
}

public static SimpleFacebook getInstance(Activity activity)
{
    if (mInstance == null)
    {
        mInstance = new SimpleFacebook();
    }

    mActivity = activity;
    return mInstance;
}

public static SimpleFacebook getInstance()
{
    return mInstance;
}

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.parse.GetDataCallback;
import com.sromku.simple.fb.SimpleFacebook;

import com.sromku.simple.fb.Properties;
import com.sromku.simple.fb.SimpleFacebook;
import com.sromku.simple.fb.SimpleFacebook.OnFriendsRequestListener;
import com.sromku.simple.fb.SimpleFacebook.OnLoginListener;
import com.sromku.simple.fb.SimpleFacebook.OnLogoutListener;
import com.sromku.simple.fb.SimpleFacebook.OnProfileRequestListener;
import com.sromku.simple.fb.entities.Profile;
import com.sromku.simple.fb.example.utils.Utils;
import com.sromku.simple.fb.utils.Attributes;
import com.sromku.simple.fb.utils.PictureAttributes;
import com.sromku.simple.fb.utils.PictureAttributes.PictureType;


 public class HomeFragment extends Fragment {

protected static final String TAG = HomeFragment.class.getName();

private SimpleFacebook mSimpleFacebook;


ProgressDialog mProgress;
 Button mButtonLogin;
Button mButtonLogout;
 TextView mTextStatus;


// Login listener
private OnLoginListener mOnLoginListener = new OnLoginListener()
{

    @Override
    public void onFail(String reason)
    {
        mTextStatus.setText(reason);
        Log.w(TAG, "Failed to login");
    }

    @Override
    public void onException(Throwable throwable)
    {
        mTextStatus.setText("Exception: " + throwable.getMessage());
        Log.e(TAG, "Bad thing happened", throwable);
    }

    @Override
    public void onThinking()
    {
        // show progress bar or something to the user while login is happening
        mTextStatus.setText("Thinking...");
    }

    @Override
    public void onLogin()
    {
        // change the state of the button or do whatever you want
        mTextStatus.setText("Logged in");
        loggedInUIState();
        toast("You are logged in");
    }

    @Override
    public void onNotAcceptingPermissions()
    {
        toast("You didn't accept read permissions");
    }
};

// Logout listener
private OnLogoutListener mOnLogoutListener = new OnLogoutListener()
{

    @Override
    public void onFail(String reason)
    {
        mTextStatus.setText(reason);
        Log.w(TAG, "Failed to login");
    }

    @Override
    public void onException(Throwable throwable)
    {
        mTextStatus.setText("Exception: " + throwable.getMessage());
        Log.e(TAG, "Bad thing happened", throwable);
    }

    @Override
    public void onThinking()
    {
        // show progress bar or something to the user while login is happening
        mTextStatus.setText("Thinking...");
    }

    @Override
    public void onLogout()
    {
        // change the state of the button or do whatever you want
        mTextStatus.setText("Logged out");
        loggedOutUIState();
        toast("You are logged out");
    }

};





@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

     View rootView = inflater.inflate(R.layout.homend_home_fragment, container, false);

    // test local language
        Utils.updateLanguage(getActivity(), "en");
        Utils.printHashKey(getActivity());
        mButtonLogin = (Button)rootView.findViewById(R.id.button_login);
        mButtonLogout = (Button)rootView.findViewById(R.id.button_logout);
        mTextStatus = (TextView)rootView.findViewById(R.id.text_status);



        mButtonLogin.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                mSimpleFacebook.login(mOnLoginListener);
            }
        });

        // 2. Logout example
        mButtonLogout.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                mSimpleFacebook.logout(mOnLogoutListener);
            }
        });





     return rootView;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    mSimpleFacebook.onActivityResult(getActivity(), requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}





private void setUIState()
{
    if (mSimpleFacebook.isLogin())
    {
        loggedInUIState();
    }
    else
    {
        loggedOutUIState();
    }
}

/**
 * Show toast
 * 
 * @param message
 */
private void toast(String message)
{
    Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
}

private void loggedInUIState()
{
    mButtonLogin.setEnabled(false);
    mButtonLogout.setEnabled(true);



    mTextStatus.setText("Logged in");
}

private void loggedOutUIState()
{
    mButtonLogin.setEnabled(true);
    mButtonLogout.setEnabled(false);


    mTextStatus.setText("Logged out");
}

private void showDialog()
{
    mProgress = ProgressDialog.show(getActivity(), "Thinking",
        "Waiting for Facebook", true);
}

private void hideDialog()
{
    mProgress.hide();
}

public class OnProfileRequestAdapter implements OnProfileRequestListener
{

    @Override
    public void onThinking()
    {
    }

    @Override
    public void onException(Throwable throwable)
    {
    }

    @Override
    public void onFail(String reason)
    {
    }

    @Override
    public void onComplete(Profile profile)
    {
    }

}

}

1 个答案:

答案 0 :(得分:1)

我认为问题可能就在这里。您刚刚声明了变量

private SimpleFacebook mSimpleFacebook;

您尚未初始化该变量,因此您获得了NPE

所以在onCreateView()方法上初始化它。

mSimpleFacebook = SimpleFacebook.getInstance(getActivity());

然而你得到错误然后你需要最终改变

mSimpleFacebook = SimpleFacebook.getInstance();

将此行添加到清单文件..

<activity android:name="com.facebook.LoginActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
</activity>

这将最终适合你。!!