簡體   English   中英

Facebook登錄android應用崩潰

[英]facebook login android app crashes

該代碼是張貼在這里和應用程序崩潰時的登錄按鈕被點擊與homefragment空指針異常的click.im一個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;
}

導入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)
    {
    }

}

}

我認為問題可能出在這里。 您剛剛聲明了變量

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>

最終將為您工作!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM