Android Edittext:尝试在空对象引用上调用接口方法
Android Edittext: Attempt to invoke interface method on a null object reference
当我运行下面的代码时,永远找不到编辑文本中的用户名。我已经使用和不使用用户名进行了测试,但是当单击按钮时,它会向事件监听器发送一个空对象。我是 android 的新手,很困惑为什么当用户名 edittext 包含用户名时它不返回字符串。
public class LoginFragment extends Fragment {
public static final String TAG = LoginFragment.class.getSimpleName();
public EditText username = null;
public View root = null;
public interface eventListener {
void someEvent(String s);
}
eventListener eventListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
root = inflater.inflate(R.layout.login_splashpage, null, false);
username = (EditText) root.findViewById(R.id.login_username);
Button login_button = (Button) root.findViewById(R.id.login_button);
login_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String usernameString = username.getText().toString();
Log.d(TAG, "Button Clicked" + usernameString);
if (!usernameString.isEmpty()) {
eventListener.someEvent(usernameString);
} else {
Snackbar.make(root, "No username provided. Try again", Snackbar.LENGTH_SHORT).show();
}
}
});
return root;
}
}
无论如何,感谢您的帮助和时间
我认为问题出在这一行
eventListener.someEvent(usernameString);
没有初始化接口eventListener的地方,你能做这样的事情吗?
eventListener ev = new eventListener(){
void someEvent(usernameString);
}
eventListener
为空,这就是您得到 NullPointerException 的原因。
由于原始接口仅提供有关派生 class 应该做什么的契约,您还必须创建其背后的逻辑:
private interface eventListener {
void onEvent(String string);
}
eventListener listener = new eventListener() {
@Override
public void onEvent(String string) {
Log.e(TAG, "onEvent " + string);
}
};
我不确定你是否想要一个接口,因为一个简单的方法就可以做到:
public void onLogin(String username) {
Log.e(TAG, "onLogin " + username)
}
当我运行下面的代码时,永远找不到编辑文本中的用户名。我已经使用和不使用用户名进行了测试,但是当单击按钮时,它会向事件监听器发送一个空对象。我是 android 的新手,很困惑为什么当用户名 edittext 包含用户名时它不返回字符串。
public class LoginFragment extends Fragment {
public static final String TAG = LoginFragment.class.getSimpleName();
public EditText username = null;
public View root = null;
public interface eventListener {
void someEvent(String s);
}
eventListener eventListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
root = inflater.inflate(R.layout.login_splashpage, null, false);
username = (EditText) root.findViewById(R.id.login_username);
Button login_button = (Button) root.findViewById(R.id.login_button);
login_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String usernameString = username.getText().toString();
Log.d(TAG, "Button Clicked" + usernameString);
if (!usernameString.isEmpty()) {
eventListener.someEvent(usernameString);
} else {
Snackbar.make(root, "No username provided. Try again", Snackbar.LENGTH_SHORT).show();
}
}
});
return root;
}
}
无论如何,感谢您的帮助和时间
我认为问题出在这一行
eventListener.someEvent(usernameString);
没有初始化接口eventListener的地方,你能做这样的事情吗?
eventListener ev = new eventListener(){
void someEvent(usernameString);
}
eventListener
为空,这就是您得到 NullPointerException 的原因。
由于原始接口仅提供有关派生 class 应该做什么的契约,您还必须创建其背后的逻辑:
private interface eventListener {
void onEvent(String string);
}
eventListener listener = new eventListener() {
@Override
public void onEvent(String string) {
Log.e(TAG, "onEvent " + string);
}
};
我不确定你是否想要一个接口,因为一个简单的方法就可以做到:
public void onLogin(String username) {
Log.e(TAG, "onLogin " + username)
}