【问题标题】:How to prevent android studio from skipping activities?如何防止android studio跳过活动?
【发布时间】:2019-01-02 02:23:16
【问题描述】:

我有一个测验应用程序,可以将分数保存在 firebase 上。它工作正常。但是每当我尝试重新参加测验时,它只会显示第一个活动,然后跳过它之后的所有活动并继续进行显示输出的最后一个活动。我检查了所有内容,ID 都是唯一的。我找不到哪里出错了。

这是我测验的第一部分。当我重新参加测验时,分数将重置为 0。它可以正常工作。但是当我单击下一步时,它将继续进行显示输出的最终活动。

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

firebaseAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();

phqChoice1 = (RadioButton) findViewById(R.id.phqChoice1);
phqChoice2 = (RadioButton) findViewById(R.id.phqChoice2);
phqChoice3 = (RadioButton) findViewById(R.id.phqChoice3);
phqChoice4 = (RadioButton) findViewById(R.id.phqChoice4);
btnNext = (Button) findViewById(R.id.btnNext);

getAnswer();

final DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");

if (myRef != null) {
    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            HashMap<String, Object> result = new HashMap<>();
            result.put("anx", 0);
            result.put("dep", 0);
            myRef.updateChildren(result);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getMessage());
        }
    });


    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    UserHistory userHistory = new UserHistory();
                    userHistory.setAnx(anx);
                    userHistory.setDep(dep);
                    myRef.setValue(userHistory);


                    Intent myIntent = new Intent(Part1.this, Part2.class);
                    startActivity(myIntent);
                    finish();
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    System.out.println("Entering data failed. " + databaseError.getMessage());
                }
            });


        }
    });
}}

 private void getAnswer() {
radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if (checkedId == R.id.phqChoice2) {
            dep++;
        } else if (checkedId == R.id.phqChoice3) {
            dep = dep + 2;
        } else if (checkedId == R.id.phqChoice4) {
            dep = dep + 3;
        }
    }
});}

这是第 2 部分活动,android 跳过这些活动,如果我重新参加测验,将继续进行最终活动。

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


    firebaseAuth = FirebaseAuth.getInstance();
    firebaseDatabase = FirebaseDatabase.getInstance();

    btnNext = (Button)findViewById(R.id.btnPart2);



    DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            UserHistory userHistory = dataSnapshot.getValue(UserHistory.class);
            anxHistory = userHistory.getAnx();
            depHistory = userHistory.getDep();

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(Part2.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();
        }
    });

    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            getAnswer();

                    anxValue = anxHistory + anx;

                    final DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid()).child("test");

                    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            HashMap<String, Object> result = new HashMap<>();
                            result.put("anx", anxValue);
                            myRef.updateChildren(result);
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            System.out.println("The read failed: " + databaseError.getMessage());
                        }
                    });


                Intent part3A = new Intent(Part2.this, Part3.class);
                startActivity(part3A);

        }
    });
}

private void getAnswer() {
    radioGroup2 = (RadioGroup) findViewById(R.id.radioGroup2);
    int selectedItem = radioGroup2.getCheckedRadioButtonId();
    if (selectedItem == R.id.part2Choice2) {
        anx++ ;
    } else if (selectedItem == R.id.part2Choice3)  {
        anx = anx + 2 ;
    }
    else if (selectedItem == R.id.part2Choice4) {
        anx = anx + 3;
    }else {
        anx = 0;
    }

        }

}

我希望每次重新参加测验时都能正常输出。所有活动都应照常进行,不得跳过任何活动。实际发生的是第一个活动正常工作,但与测验相关的所有其他活动最终都被跳过。请帮忙。我一无所知,我不知道我还应该检查什么。

此外,如果我单击单选按钮 A(值为 0),活动将照常继续。如果我单击其他值大于 0 的按钮(值是 1-3),然后活动将跳到显示输出的最终活动。

为了简化:单击单选按钮 A (0) > 下一个活动,单击单选按钮 A(0),> 下一个活动(照常进行。)。或单击单选按钮 B (1) > 跳过其他活动,继续进行最后一项活动。

【问题讨论】:

  • 您可以编辑您的问题而不是添加评论。
  • 我编辑了这个问题。抱歉,谢谢@AmitRay

标签: android android-studio android-intent android-activity


【解决方案1】:

尝试将 Intent 放在 btnNext,onClickListener 方法之外

Intent part3A = new Intent(Part2.this, Part3.class);
btnNext.setOnClcikListener(){
//here call your intent from Part2

startActivity(part3A);
}

【讨论】:

  • 我做不到。它说变量'part3A'是从内部类访问的,需要声明为final。
  • 将其定为最终...。如果仍然无法正常工作,请尝试通过在活动二的 OnCreate 方法的第一行添加 SOUT 来跟踪活动...
  • 对不起,我不知道 SOUT 是什么意思。我刚开始使用 android。
  • 只需键入“sout”然后单击“TAB”按钮 sout = system.out.println()
  • //活动 2 @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("hi...."); super.onCreate(savedInstanceState); setContentView(R.layout.activity_part2);
【解决方案2】:

我将 Intent 活动放在 ValueEventListener 中,因此每当我尝试输入新数据时,它都会跳到 Final 活动。修复:

  myRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                UserHistory userHistory = new UserHistory();
                userHistory.setAnx(anx);
                userHistory.setDep(dep);
                myRef.setValue(userHistory);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                System.out.println("Entering data failed. " + databaseError.getMessage());
            }
        });

Intent myIntent = new Intent(Part1.this, Part2.class);
                startActivity(myIntent);
                finish();

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多