2017-05-12 14 views
0

誰かがこれを手助けできますか?私のEditTextは空ではありませんが、トーストはまだ表示されます。私のアプリは、ユーザに日付と時間を選択させ、次に進むためにリストビュー上の1つの項目を選択するように要求する。その後、ダイアログが表示されます。しかし何らかの理由で、たとえ自分のエディットテキストが空ではないにもかかわらず、それでも私は編集を続行できません。私は何が間違っているのか分かりません。コードは単純で、何も複雑ではありません。Java 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 
    android:id="@+id/textView2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Previous Team" 
    android:textAppearance="@style/TextAppearance.AppCompat.Title" 
    android:textAlignment="center"/> 

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


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

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

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

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

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

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

ちょうどあなたが一度だけその値を代入ゼロ – Shriram

+0

を貼り付け?あなたは更新された値を必要とすることができますので、onItemClickで取得してください初期化時に値を設定している可能性があります。 – Sasi

+0

より大きいのEditText内の文字列の長さによって、それをチェックし、あなたの完全なコード – Pavan

答えて

0

から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; 
    } 

} 
0

あなたのフィールドは、一度だけ初期化されます。私はコンテキストを知らないが、これは実際にあなたが望むものかもしれないが、毎回それを検証する意味がなく、それらのフィールドはリスナーコードが実行されるたびに同じ値を持つ。リスナー自体に日付と時刻を取得するコードを追加してみてください。

0

あなたのコードは、[日付]および[時刻] のonClickListenerのの外側に設定されています。ユーザーがボタンをクリックすると、コードは変数をリセットしません。私はあなたのonClickListenerコードから直接のEditTextを評価したい:あなたは一度だけ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; 
    } 
0

クリックリスナー内でedittextの日付値を取得してみてください。

0
listViewHistory.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    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(date.isEmpty()){ 
      Toast.makeText(RecreateActivity.this,"Please choose a date.",Toast.LENGTH_LONG).show(); 
      return; 
     } 

     if(time.isEmpty()){ 
      Toast.makeText(RecreateActivity.this,"Please choose a time.",Toast.LENGTH_LONG).show(); 
      return; 
     } 
関連する問題