gpt4 book ai didi

java - EditText = null 对象引用?

转载 作者:行者123 更新时间:2023-12-02 04:28:22 25 4
gpt4 key购买 nike

我正在开发登录和注册系统,但在尝试点击“登录”按钮时收到此错误。

08-06 00:36:19.258  25808-25808/com.kylek.hatework E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.kylek.hatework, PID: 25808
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at com.kylek.hatework.Login.onClick(Login.java:42)
at android.view.View.performClick(View.java:5254)
at android.view.View$PerformClick.run(View.java:21173)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

这是我的 Login.java

package com.kylek.hatework;

import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class Login extends ActionBarActivity implements View.OnClickListener {
Button bLogin;
TextView registerLink;
EditText etUsername, etPassword;
String username, password;

UserLocalStore userLocalStore;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

bLogin = (Button) findViewById(R.id.bLogin);
etUsername = (EditText) findViewById(R.id.etUsername);
etPassword = (EditText) findViewById(R.id.etPassword);
registerLink = (TextView) findViewById(R.id.tvRegisterLink);

bLogin.setOnClickListener(this);
registerLink.setOnClickListener(this);

userLocalStore = new UserLocalStore(this);
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.bLogin:
Log.v("username", etUsername.getText().toString());
Log.v("password", etPassword.getText().toString());

User user = new User(username, password);

authenticate(user);
break;
case R.id.tvRegisterLink:
Intent registerIntent = new Intent(Login.this, Register.class);
startActivity(registerIntent);
break;
}
}

private void authenticate(User user) {
ServerRequests serverRequest = new ServerRequests(this);
serverRequest.fetchUserDataAsyncTask(user, new GetUserCallback() {
@Override
public void done(User returnedUser) {
if (returnedUser == null) {
showErrorMessage();
} else {
logUserIn(returnedUser);
}
}
});
}

private void showErrorMessage() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Login.this);
dialogBuilder.setMessage("Incorrect user details");
dialogBuilder.setPositiveButton("Ok", null);
dialogBuilder.show();
}

private void logUserIn(User returnedUser) {
userLocalStore.storeUserData(returnedUser);
userLocalStore.setUserLoggedIn(true);
startActivity(new Intent(this, MainActivity.class));
}
}

我查阅了很多有关 SOF 的其他文章,但在这种特殊情况下没有任何帮助。也许我错过了一些简单的事情,但我今晚已经受够了尝试修复它。有什么建议吗?

最佳答案

我在下面的代码中指出了一些建议。请验证这些:

public class Login extends ActionBarActivity implements View.OnClickListener {
Button bLogin;
TextView registerLink;
EditText etUsername, etPassword;
String username, password;

UserLocalStore userLocalStore;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

bLogin = (Button) findViewById(R.id.bLogin);
etUsername = (EditText) findViewById(R.id.etUsername);
etPassword = (EditText) findViewById(R.id.etPassword);
registerLink = (TextView) findViewById(R.id.tvRegisterLink);

您在其中一个 EditText(此处为 etUsername)上收到 NullPointerException。这意味着特定的编辑文本尚未初始化,您正在对其调用方法。

在下面的这一行中,您遇到了异常。您正在调用 etUsername 上的 getText() 方法,该方法为 null

Log.v("username", etUsername.getText().toString());

请按照以下步骤确定您的问题:

  1. 验证 R.layout.activity_login xml 文件中的上述 EditText id 是否存在。

  2. 验证 findViewById() 内引用的 EditText 的 id 是否属于您的 R.layout.activity_login 布局文件。

在onClick()方法中,userName和password变量被初始化为默认值null。

您需要根据从 EditText 获取的值来初始化它们(如果它不为空):

username = etUsername.getText().toString();
password = etPassword.getText().toString();

一旦变量被正确初始化,就可以进一步使用它们:

User user = new User(username, password);
authenticate(user);

关于java - EditText = null 对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com