2016-04-25 12 views
-1

Ich habe eine Funktionalität in meiner Android-Anwendung, in der ich Telefonkontakte im Layout dynamisch hinzufügen und den Kontaktnamen und die Nummer in zwei Arrays speichern, so dass es in gemeinsamen Einstellungen gespeichert werden konnte.Java-Programmierung: logische Operatoren und Funktionen in Android-Anwendung



Die Bedingungen dieser Funktionalität ist

1. während Hinzufügen eines neuen Kontakts geprüft werden sollte, wenn wir den gleichen Kontakt in der Liste oder nicht haben, wenn wir dann brauchen wir nicht hinzufügen es wieder.


2. Benutzer kann nur maximal fünf Kontakte in der Liste hinzufügen, wenn er/sie mehr als fünf die erste Nummer der Liste hinzufügt, oder ich sollte sagen, der erste Index des Arrays sollte entfernt werden und der neue sollte sein füge am Ende hinzu, so dass es fünf Zahlen von max.

das Problem im hier konfrontiert wird, während die Überprüfung, dass contactnumber existieren bereits in der Liste oder nicht, die ihre Funktion ein Rückgabetyp und der Ruf von IsAvailableInContactList ist, um Kontakte in AddtoContactList Funktion hinzufügen die Anwendung abstürzt, wenn ich Anruf entfernen zu dieser Funktion, die unten funktioniert, aber ohne Überprüfung der Verfügbarkeit in der Liste.

if(IsAvailableInContactList(paramString2).equals("true")){ 
     Toast.makeText(mContext, "Contact already exist in the list", Toast.LENGTH_SHORT).show(); 
     return; 
      } 

hier sind komplette Code für diese:

public void AddtoContactList(String paramString1, String paramString2) { 
    if(IsAvailableInContactList(paramString2).equals("true")){ 
    Toast.makeText(mContext, "Contact already exist in the list", Toast.LENGTH_SHORT).show(); 
    return; 
     } 

    if (this.contactlistcount >= 5) { 

    for (int i = 0; i < 5; i++) { 
    this.contactlistname[i] = this.contactlistname[(i + 1)]; 
     this.contactlistnum[i] = this.contactlistnum[(i + 1)]; 
      } 
     this.contactlistcount = (-1 + this.contactlistcount); 
      } 

      this.contactlistname[this.contactlistcount] = paramString1; 
      this.contactlistnum[this.contactlistcount] = paramString2; 
      this.contactlistcount = (1 + this.contactlistcount); 
      } 


      public String IsAvailableInContactList(String paramString) { 

      for (int i = 0; i < this.contactlistcount; i++) { 
      if ((this.contactlistnum[i] != null) && (this.contactlistnum[i].equalsIgnoreCase(paramString))) { 
           j= "true"; 
          } 
         } 
       return j; 
       } 

ich zu boolean Rückgabetyp in IsAvailableInContactList Funktion aber seine Probleme zu schaffen und Fehler verwendet versucht.


Ich möchte Kontakte für die Verfügbarkeit überprüfen, und fügen Sie sie dann auf Array-Indizes , wenn es von Höchstzahlen ein Kontakt von Anfang an erhöht wird entfernt und die neue am Ende fügt aber sieht aus wie etwas ist, falsch in der Syntax der Verfügbarkeitskontrolle.

Ich hoffe, ich habe das Problem richtig erklärt.
jede mögliche Hilfe würde viele
Dank im Voraus

+0

Hinweis: ** Verwenden Sie BOOL anstelle von String 'true' und' false' Werten **. Es ist, was bool für lol, nicht die Schnur entworfen ist: D – Vucko

+0

wirklich? Vielen Dank für den Rat, ich wusste das nicht: D, ich versuchte auch Boolean, aber seine Rückkehr wahr, auch wenn Nummer nicht in Array – Angel

+0

Nun, bool ist der Weg zu gehen, aber Ihre Logik war fehlerhaft irgendwo ... Sie ' Ich glaube es nicht, aber es ist kaum Java, das nicht funktioniert:/ – Vucko

Antwort

0

Sie können eine Menge Dinge in Ihrem Code verbessern geschätzt. Ich schlage vor, einige der Änderungen hier -

  1. Sie ArrayList statt primitive array verwenden können. Dies wird Ihnen helfen, den Inhalt leicht zu ändern, wenn Sie diese Anforderung haben.

  2. sie ändern Ihre IsAvailableInContactList() boolean wahr oder falsch zurück basierend darauf, ob die paramString in Ihrem contactlistnum vorhanden ist oder nicht -

    public boolean IsAvailableInContactList(String paramString) { 
    
         if(contactlistnum.contains(paramString)){ 
          return true; 
         } 
        else{ 
         return false; 
        } 
    } 
    
  3. Schließlich Ihr AddtoContactList() ändern -

    public void AddtoContactList(String paramString1, String paramString2) { if(IsAvailableInContactList(paramString2)){ Toast.makeText(mContext, "Contact already exist in the list", Toast.LENGTH_SHORT).show(); return; }
    if (contactlistnum.size() >= 5) { contactlistnum.remove(0); //Removes 1st item contactlistnum.add(4,paramString1); //Add the new item at the 5th index } }

Hoffe diese Änderungen behebt Ihre Probleme.

+0

Vielen Dank für Ihre Antwort Ich werde es sicher versuchen – Angel

0

Die erste Sache, die mich hier wirklich herausspringt, ist die Art, wie Sie zwei Arrays halten, um Daten zu speichern, wenn beide voneinander abhängen. Wenn Sie eine Kontaktnummer haben, haben Sie immer einen Namen und umgekehrt. Warum also nicht einen Kontaktklasse, wie diese erstellen:

class Contact { 
    String name; 
    String number; 

    public Contact(String name, String number) { 
     this.name = name; 
     this.number = number; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getNumber() { 
     return number; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (o == null || !(o instanceof Contact)) 
      return false; 

     Contact other = (Contact)o; 
     return name.equals(other.name) && number.equals(other.number); 
    } 
} 

Statt nun zwei Reihen von Verwaltung und auf jedem Array den gleichen Code ausgeführt wird jedes Mal, wenn Sie etwas tun, nur ein Array benötigen.

Ein weiterer Punkt - Sie verwenden das Wort "Liste" viel in der Problembeschreibung, also warum nicht die Kontakte in einer Liste, nicht ein Array speichern? Es hat viele Funktionen, nach denen Sie suchen.

// Wherever you declared your arrays 'contactlistname' and 'contactlistnum', 
// do this instead: 
List<Contact> contacts = new ArrayList<Contact>(); 

// Now your code can be much shorter, easier to read and understand 
public void addtoContactList(String name, String number) { 
    if(IsAvailableInContactList(name)){ 
     Toast.makeText(mContext, "Contact already exist in the list", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

    if (contacts.size() >= 5) 
     contacts.removeAt(0); // Remove the first contact in the list 

    contacts.add(new Contact(name, number)); 
} 


public boolean isAvailableInContactList(String name) { 
    for (Contact contact : contacts) 
     if (contact.getName().equals(name)) 
      return true; 
    return false; 
} 

Bitte beachte, dass ich aktualisiert auch die isAvailableInContactList einen boolean zu verwenden, anstatt einen String.

+0

Vielen Dank für Ihre Antwort, eigentlich ist das Problem nicht bei der Definition Array, ist es in ** isAvailableInContactList ** Funktion und ich boolean auch verwendet, aber immer noch, wenn ich versuche, Kontakte hinzuzufügen, wenn Array leer ist, stürzt die Anwendung ab. während es die Codes nach der zweiten if-Bedingung in ** addtoContactList ** ausführen sollte, falls das Array Nummern hat und ich die Anwendung ausführe ** isAvailableInContactList ** kann die Verfügbarkeit prüfen, aber keine neuen Kontakte hinzufügen oder wenn es leer ist – Angel

+0

Wenn du "Crashing" sagst, könntest du etwas genauer sein? Bitte aktualisieren Sie Ihren Post mit der Ausnahme, die ausgelöst wird. Dann können wir Ihnen vielleicht helfen. –

Verwandte Themen