使用Facebook和电子邮件登录

时间:2016-03-04 09:35:23

标签: android login facebook-login

嘿,我想将 Facebook登录整合到我的登录页面,但是我得到了以下错误。

  

java.lang.NullPointerException:尝试调用虚方法' void   android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'   在com.startingandroid.registrationandlogin.LoginActivity.onCreate(LoginActivity.java:78)上的空对象引用上

以下是我的代码。

android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.app.LoaderManager.LoaderCallbacks;

import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;

import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static android.Manifest.permission.READ_CONTACTS;


public class LoginActivity extends AppCompatActivity {

private Button registrationButton, loginButton;
private EditText email_to_login, password_to_login;

private ProgressDialog progressDialog;
private Session session;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolBar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolBar);
    session = new Session(LoginActivity.this);
    progressDialog = new ProgressDialog(this);
    progressDialog.setCancelable(false);
    registrationButton = (Button) findViewById(R.id.registration_button);
    loginButton = (Button) findViewById(R.id.signin_button);
    email_to_login = (EditText) findViewById(R.id.email_to_login);
    password_to_login = (EditText) findViewById(R.id.password_to_login);


    registrationButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(),
                    RegistrationActivity.class);
            startActivity(intent);
            finish();
        }
    });

    loginButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = email_to_login.getText().toString();
            String password = password_to_login.getText().toString();

            if (email.trim().length() > 0 && password.trim().length() > 0) {
                checkLogin(email, password);
            } else {
                Snackbar.make(v, "Please enter the credentials!", Snackbar.LENGTH_LONG)
                        .show();
            }
        }
    });
}

 private void checkLogin(final String email, final String password) {
    String tag_string_req = "req_login";

    progressDialog.setMessage("Logging in ...");
    showDialog();

    StringRequest strReq = new StringRequest(Request.Method.POST,
            AppURLs.URL, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            hideDialog();

            try {
                JSONObject jObj = new JSONObject(response);
                String userId = jObj.getString("user_id");

                if (userId != null) {
                    session.setLogin(true);
                    Intent intent = new Intent(LoginActivity.this,
                            MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    String errorMsg = jObj.getString("error_msg");
                    Toast.makeText(getApplicationContext(),
                            errorMsg, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_LONG).show();
            hideDialog();
        }
    }) {

        @Override
        protected Map<String, String> getParams() {
            // Post params to login url
            Map<String, String> params = new HashMap<String, String>();
            params.put("tag", "login");
            params.put("email", email);
            params.put("password", password);

            return params;
        }

    };

    // Adding request to  queue
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}

private void showDialog() {
    if (!progressDialog.isShowing())
        progressDialog.show();
}

private void hideDialog() {
    if (progressDialog.isShowing())
        progressDialog.dismiss();
}
}

1 个答案:

答案 0 :(得分:0)

以下是facebook登录的完整代码:

xml文件:

  <com.facebook.login.widget.LoginButton
                android:id="@+id/login_button"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />

java文件:

    private CallbackManager callbackManager;
 private LoginButton loginButton;

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



        FacebookSdk.sdkInitialize(this.getApplicationContext());

        callbackManager = CallbackManager.Factory.create();

  setContentView(R.layout.youractivity);

   loginButton = (LoginButton) findViewById(R.id.login_button);

        loginButton.setReadPermissions(Arrays
                .asList("public_profile, email, user_birthday, user_friends"));


    loginButton.registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {


                        Log.wtf("FB Login", "Success!");

                        new fblogin().execute(loginResult.getAccessToken());

                    }

                    @Override
                    public void onCancel() {

                        Log.wtf("FB Login", "Cancel!");

                    }

                    @Override
                    public void onError(FacebookException e) {

                        Log.wtf("FB Login", e.getMessage());

                    }
                });

}


   class fblogin extends AsyncTask<AccessToken, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("Please Wait..");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        protected String doInBackground(AccessToken... params) {
            // TODO Auto-generated method stub

            // App code
            GraphRequest request = GraphRequest.newMeRequest(params[0],
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object,
                                                GraphResponse response) {
                            // Application code
                            Log.v("LoginActivity", response.toString());

                            try {

                                username = object.getString("first_name");


                                emailid = object.getString("email");

                                facebook_id = object.getString("id");
                                /*
                                 * profilePictureView .setProfileId(object
                                 * .getString("id"));
                                 */

                                gender = object.getString("gender");

                                bday = object.getString("birthday");

                            } catch (JSONException e) {
                                // TODO Auto-generated catch
                                // block
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields",
                    "id,first_name,email,gender,birthday");
            request.setParameters(parameters);
            request.executeAndWait();

            return null;
        }

        protected void onPostExecute(String yourvalue) {
            // dismiss the dialog once done
            pDialog.dismiss();


                new checkLogin().execute(); // your custom function.

        }

    }

在清单文件中添加以下内容:

 <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>