Java 为什么我的android应用程序在我向数据库填写一个简单的问题表时会回到以前的活动?

Java 为什么我的android应用程序在我向数据库填写一个简单的问题表时会回到以前的活动?,java,android,Java,Android,我正在尝试建立一个测验应用程序,管理员将在管理活动中创建问题,这些问题将在另一个活动中显示为测验考试。当我试图通过单击管理员活动中的“创建问题”按钮来填写表单时,我的应用程序将返回到上一个活动(adminlogin活动) 以下是AdminActivity的代码: public class AdminActivity extends AppCompatActivity { Button btnCreateQuestion, btnReadQuestion, btnDeleteQuestion; E

我正在尝试建立一个测验应用程序,管理员将在管理活动中创建问题,这些问题将在另一个活动中显示为测验考试。当我试图通过单击管理员活动中的“创建问题”按钮来填写表单时,我的应用程序将返回到上一个活动(adminlogin活动) 以下是AdminActivity的代码:

public class AdminActivity extends AppCompatActivity {
Button btnCreateQuestion, btnReadQuestion, btnDeleteQuestion;
EditText editTextQuestion, editTextOption1, editTextOption2, editTextOption3, editTextOption4,
    editTextAnswerNo,editTextChapterNo;
QuizDbHelper db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin);
    btnCreateQuestion = findViewById(R.id.btnCreateQuestion);
    btnReadQuestion = findViewById(R.id.btnReadQuestions);
    btnDeleteQuestion = findViewById(R.id.btnDeleteQuestions);
    editTextQuestion = findViewById(R.id.editTextQuestion);
    editTextOption1 = findViewById(R.id.editTextOption1);
    editTextOption2 = findViewById(R.id.editTextOption2);
    editTextOption3 = findViewById(R.id.editTextOption3);
    editTextOption4 = findViewById(R.id.editTextOption4);
    editTextAnswerNo = findViewById(R.id.editTextAnswerNo);
    editTextChapterNo = findViewById(R.id.editTextChapterNo);
    db = new QuizDbHelper(this);

    btnCreateQuestion.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String question = editTextQuestion.getText().toString();
            String option1 = editTextOption1.getText().toString();
            String option2 = editTextOption2.getText().toString();
            String option3 = editTextOption3.getText().toString();
            String option4 = editTextOption4.getText().toString();
            Integer answerNo = Integer.parseInt(editTextAnswerNo.getText().toString());
            String chapterName = editTextAnswerNo.getText().toString();
            if( question != "" && option1 != "" && option2 != "" && option3 != "" && option4 != "" && answerNo!= null && chapterName != ""){
                Question q = new Question(question,option1,option2,option3,option4,answerNo,chapterName);
                db.addQuestion(q);
                Toast.makeText(AdminActivity.this,"Question Added", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(AdminActivity.this,"Please fill up", Toast.LENGTH_SHORT).show();
            }

        }
    });
    btnReadQuestion.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           ArrayList<Question> allQuestions = db.getAllQuestions();
           if(allQuestions.size()< 1){
                Toast.makeText(AdminActivity.this,"No questions in the Database", Toast.LENGTH_SHORT).show();
           }else {
               StringBuffer buffer = new StringBuffer();
               for (Question q: allQuestions) {
                   buffer.append("Question : " + q.getQuestion() + "\n" );
                   buffer.append("Option1:  " + q.getOption1() + "\n");
                   buffer.append("Option2:  " + q.getOption2() + "\n");
                   buffer.append("Option3:  " + q.getOption3() + "\n");
                   buffer.append("Option4:  " + q.getOption4() + "\n");
                   buffer.append("Answer No:  " + q.getAnswerNo() + "\n");
                   buffer.append("Option4:  " + q.getChapterName() + "\n\n");
               }

               AlertDialog.Builder builder = new AlertDialog.Builder(AdminActivity.this);
               builder.setCancelable(true);
               builder.setTitle("Questions");
               builder.setMessage(buffer.toString());
               builder.show();
           }
        }
    });
    btnDeleteQuestion.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}}
公共类AdminActivity扩展了AppCompatActivity{
按钮btnCreateQuestion、btnReadQuestion、btnDeleteQuestion;
编辑文本编辑文本问题,编辑文本选项1,编辑文本选项2,编辑文本选项3,编辑文本选项4,
editTextAnswerNo,editTextChapterNo;
基兹德贝尔德;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);
btnCreateQuestion=findViewById(R.id.btnCreateQuestion);
btnReadQuestion=findViewById(R.id.btnReadQuestions);
btnDeleteQuestion=findviewbyd(R.id.btnDeleteQuestions);
editTextQuestion=findViewById(R.id.editTextQuestion);
editTextOption1=findViewById(R.id.editTextOption1);
editTextOption2=findViewById(R.id.editTextOption2);
editTextOption3=findViewById(R.id.editTextOption3);
editTextOption4=findViewById(R.id.editTextOption4);
editTextAnswerNo=findViewById(R.id.editTextAnswerNo);
editTextChapterNo=findViewById(R.id.editTextChapterNo);
db=新QuizDbHelper(本);
btnCreateQuestion.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
String question=editTextQuestion.getText().toString();
字符串option1=editTextOption1.getText().toString();
字符串option2=editTextOption2.getText().toString();
字符串option3=editTextOption3.getText().toString();
字符串option4=editTextOption4.getText().toString();
整数answerNo=Integer.parseInt(editTextAnswerNo.getText().toString());
String chapterName=editTextAnswerNo.getText().toString();
如果(问题!=“”&&option1!=“”&&option2!=“”&&option3!=“”&&option4!=“”&&answerNo!=null&&chapterName!=“”){
问题q=新问题(问题、选项1、选项2、选项3、选项4、答案编号、章节名称);
db.补充问题(q);
Toast.makeText(AdminActivity.this,“添加问题”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(AdminActivity.this,“请填写”,Toast.LENGTH_SHORT.show();
}
}
});
btnReadQuestion.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
ArrayList allQuestions=db.getAllQuestions();
if(allQuestions.size()<1){
Toast.makeText(adminivity.this,“数据库中没有问题”,Toast.LENGTH_SHORT.show();
}否则{
StringBuffer=新的StringBuffer();
对于(问题q:所有问题){
append(“问题:+q.getQuestion()+”\n”);
buffer.append(“Option1:+q.getOption1()+”\n”);
append(“Option2:+q.getOption2()+”\n”);
buffer.append(“Option3:+q.getOption3()+”\n”);
buffer.append(“Option4:+q.getOption4()+”\n”);
append(“应答号:+q.getAnswerNo()+”\n”);
buffer.append(“Option4:+q.getChapterName()+”\n\n”);
}
AlertDialog.Builder=新建AlertDialog.Builder(AdminActivity.this);
builder.setCancelable(true);
建造商名称(“问题”);
setMessage(buffer.toString());
builder.show();
}
}
});
btnDeleteQuestion.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
}}

有线索吗?提前谢谢。

在创建活动类的
功能时,是否已初始化
编辑文本和
按钮

此外,您必须对您的状况进行如下更改:

if(!question.equalsIgnoreCase("") && !option1.equalsIgnoreCase("") && !option2.equalsIgnoreCase("") && !option3.equalsIgnoreCase("") && !option4.equalsIgnoreCase("") && answerNo != 0 && !chapterName.equalsIgnoreCase("")
因为,
==
测试引用相等性(它们是否是相同的对象)


然而,
equalsIgnoreCase()
在比较两个字符串时忽略大小写。

可能是您的一些
EditText
返回
null
,因此存在
NullPointerException
。检查您的logcat在logcat中没有错误。请尝试
debug
并检查导致问题的原因。如果我已调试,应用程序将从我的活动文件转到looper.java文件。然后在那个里循环,然后应用程序将返回到上一个活动。所有EditText都在获取变量。怀疑出现异常,AdminActivity被销毁,后台LoginActivity显示。我建议在onClick实现上添加try-catch块,并记录异常跟踪。这可能有助于找到异常。是的,我已启动、编辑文本和按钮。我想问题出在这里:整数answerNo=Integer.parseInt(editTextAnswerNo.getText().toString());这是一个正确的语句吗?在xml中:将您的editText inputType设置为answerNo的数字。已经这样做了,获取:java.lang.NullPointerException:尝试调用虚拟方法'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String,java.lang.String,android.content.ContentValues)'在com.tanvirgeek.quizeexamapp.QuizDbHelper.addQuestion(QuizDbHelper.java:98)的空对象引用上,我修复了这个问题。有两个错误:1。Null指针异常,因为DbHelper类中的my db变量仅被启动,未被赋值。2.EditText answerNo Integer无法处理“N/A”,如果我将字段保留为空并单击“插入”按钮。谢谢大家的帮助