有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java EditText未正确验证

有人能帮忙吗?我的编辑文本不是空的,但是祝酒词仍然出现。我的应用程序要求用户选择日期和时间,然后在列表视图中选择一项继续。之后会弹出一个对话框。然而由于某种原因,即使我的edittext不是空的,它仍然不允许我继续。我似乎不知道怎么回事,我的意思是代码就是这么简单,没有什么复杂的

final String date = textDate1.getText().toString().trim();
    final String time = textTime1.getText().toString().trim();

listViewHistory.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    final Team team = teams.get(i);

    if(TextUtils.isEmpty(date)){
        Toast.makeText(RecreateActivity.this,"Please choose a date.",Toast.LENGTH_LONG).show();
        return;
    }

    if(TextUtils.isEmpty(time)){
        Toast.makeText(RecreateActivity.this,"Please choose a time.",Toast.LENGTH_LONG).show();
        return;
    }

//the rest of the code

final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(RecreateActivity.this);
    LayoutInflater inflater = getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.confirm_layout, null);
    dialogBuilder.setView(dialogView);

    final Button buttonYes2 = (Button) dialogView.findViewById(R.id.buttonYes2);
    final Button buttonNo2 = (Button) dialogView.findViewById(R.id.buttonNo2);
    //final Team team = teams.get();

    final AlertDialog b = dialogBuilder.create();
    b.show();

    buttonYes2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            databaseMembers.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    final ArrayList<String> CheckList = new ArrayList<String>();
                    for (DataSnapshot check : dataSnapshot.child("teams").getChildren()) {
                        CheckList.add(check.getKey());
                    }
                    if (CheckList.contains(team.getTeamName())) {
                        Toast.makeText(RecreateActivity.this, "Team already exist.", Toast.LENGTH_LONG).show();
                        return;
                    }
                    databaseMembers.child("History").child(team.getTeamName()).child("date").setValue(date);
                    databaseMembers.child("History").child(team.getTeamName()).child("time").setValue(time);

                    for (DataSnapshot history : dataSnapshot.child("History").child(encodedEmailAddress).getChildren()) {
                        String key = history.getKey();
                        if (key.equals(team.getTeamName())) {
                            teams.clear();
                            Team team = history.getValue(Team.class);
                            teams.add(team);
                            databaseTeams.child(team.getTeamName()).setValue(team);
                        }
                        if (key.equals("teamMember")) {
                            for (DataSnapshot members : dataSnapshot.child("History").child(encodedEmailAddress).child("teamMember").getChildren()) {
                                String key2 = members.getKey();
                                String value = members.getValue(String.class);
                                Map<String, Object> map = new HashMap<>();
                                map.put(key2, value);

                                databaseMembers.child("members").child(team.getTeamName()).child("teamMember").updateChildren(map);
                                b.dismiss();
                            }
                        }

                    }
                    Toast.makeText(RecreateActivity.this, "Team created.", Toast.LENGTH_LONG).show();

                    Intent myIntent = new Intent(RecreateActivity.this,
                            MainActivity.class);
                    startActivity(myIntent);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    });
}

XML:

<TextView
    安卓:id="@+id/textView2"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:text="Previous Team"
    安卓:textAppearance="@style/TextAppearance.AppCompat.Title"
    安卓:textAlignment="center"/>

<TextView
    安卓:id="@+id/textView3"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:text="Select new Date/Time and tap on the Team."
    安卓:textAlignment="center"/>


<ListView
    安卓:id="@+id/listViewHistory"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:layout_weight="1">
</ListView>

<TextView
    安卓:id="@+id/textView5"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:text="Members:"
    安卓:textAppearance="@style/TextAppearance.AppCompat.Headline" />

<TextView
    安卓:id="@+id/textViewList"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:text=""
    安卓:textAppearance="@style/TextAppearance.AppCompat.Medium" />

<EditText
    安卓:id="@+id/textDate1"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:hint="Select Date..."
    安卓:layout_alignParentStart="true" />

<EditText
    安卓:id="@+id/textTime1"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:hint="Select Time..."
    安卓:layout_below="@+id/textDate"
    安卓:layout_alignParentStart="true" />

<Button
    安卓:id="@+id/buttonAddHistory"
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:text="Create Team"
    安卓:textAlignment="center"
    安卓:textAllCaps="false"
    tools:textSize="20sp" />

共 (3) 个答案

  1. # 1 楼答案

    您的代码正在OnClick Listener的外部设置[date]和[time]。当用户单击该按钮时,代码不会重置变量。我会直接从onClickListener代码中计算EditText:

    listViewHistory.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        final Team team = teams.get(i);
    
        if(TextUtils.isEmpty(textDate1.getText().toString().trim())){
            Toast.makeText(RecreateActivity.this,"Please choose a date.",Toast.LENGTH_LONG).show();
            return;
        }
    
        if(TextUtils.isEmpty(textTime1.getText().toString().trim())){
            Toast.makeText(RecreateActivity.this,"Please choose a time.",Toast.LENGTH_LONG).show();
            return;
        }
    
  2. # 2 楼答案

    尝试在单击侦听器中获取edittext的日期值

  3. # 3 楼答案

    您仅从EditText获取一次字符串-在设置OnItemClickListener之前。你需要在监听器中输入字符串

    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        final Team team = teams.get(i);
        final String date = textDate1.getText().toString().trim();
        final String time = textTime1.getText().toString().trim();
    
        if(TextUtils.isEmpty(date)){
            Toast.makeText(RecreateActivity.this,"Please choose a date.",Toast.LENGTH_LONG).show();
            return;
        }
    
        if(TextUtils.isEmpty(time)){
            Toast.makeText(RecreateActivity.this,"Please choose a time.",Toast.LENGTH_LONG).show();
            return;
        }
    
    }