嘿,我想将 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();
}
}
答案 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"/>