【发布时间】:2019-05-01 19:57:29
【问题描述】:
在过去的几个小时里,我一直在努力寻找问题的答案,但在尝试了不同的方法后,我无法解决我的问题。
我想要的是使用一个 Edittext 和一个对该 edittext 执行某些操作的按钮。这是我在 fragment_main.xml 中的代码:
<android.support.design.widget.TextInputLayout
android:id="@+id/text_input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true">
<android.support.design.widget.TextInputEditText
android:id="@+id/email_input"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"/>
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/send_email_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send"/>
还有我在 MainFragment.java 中的代码:
import ...
public class MainFragment extends Fragment {
private TextInputLayout textInputEmail;
public MainFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
textInputEmail = (TextInputLayout) view.findViewById(R.id.text_input_email);
Button send_button = (Button) view.findViewById(R.id.send_email_button);
send_button.setOnClickListener(view -> buttonSend(view));
return view;
}
private boolean validateEmail() {
String emailInput = textInputEmail.getEditText().getText().toString().trim();
if (emailInput.isEmpty()) {
textInputEmail.setError("Field can't be empty!");
return false;
} else {
textInputEmail.setError(null);
return true;
}
}
public void buttonSend(View v) {
if (!validateEmail() ) {
return;
}
/*do something*/
}
}
为此,我的任何一个代码都没有出现任何错误,因此我并不真正了解问题所在。我在 MainActivity.java 中收到的警告是“'getText' 可能会在 validateEmail() 方法中的 .getText() 部分产生'java.lang.NullPointerException'”。
希望我解释得很好。感谢任何试图提供帮助的人!
编辑:我相信我解释得不够清楚。我忘了说当我按下发送按钮时,我的应用程序会立即崩溃。这就是我要解决的问题。
编辑 2:这是我认为的“堆栈跟踪”。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.luka.straingeremailapp, PID: 2728
java.lang.IllegalStateException: Could not find method buttonSend(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:424)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:381)
at android.view.View.performClick(View.java:6291)
at android.view.View$PerformClick.run(View.java:24931)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
【问题讨论】:
-
能否提供应用崩溃时打印的堆栈跟踪信息?
-
我已经准备好这样做了,你能告诉我具体怎么做吗?
-
@pantank14 粘贴应用崩溃后出现在 android studio 的 logcat 中的日志
-
我相信我已经将它添加到上面的主要问题中。
标签: java android xml nullpointerexception nullable