2016-04-25 79 views
-1

我在我的android應用程序中有一項功能,我可以在佈局中動態添加手機聯繫人並將聯繫人姓名和號碼保存在兩個數組中,以便它可以存儲在共享首選項中。java編程:Android應用程序中的邏輯運算符和函數



這個功能的條件是

1.添加新的聯繫人,如果我們在列表中的聯繫人相同與否,如果我們有那麼我們就需要添加應檢查它再次。


2.用戶可以只添加最多五個觸點在列表中,如果他/她是增加超過五個強之列的第一個數字或者我應該說數組的第一個索引應當去掉,新的一應在最後添加,以便獲得最多5個數字。

問題IM面臨這裏同時檢查是contactnumber已存在於列表或不是它的功能是返回類型和IsAvailableInContactList的號召,在AddtoContactList添加聯繫人功能崩潰,如果我刪除調用應用程序到這個功能正在運行,但沒有檢查列表中的可用性。

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

這裏有完整的代碼,這些:

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

我試着在IsAvailableInContactList功能,但其創造的問題和錯誤太布爾使用的返回類型。


我想驗證可用性聯繫人,然後將它們添加到數組索引 如果從最高人數從開始一個觸點刪除,而新的在年底加入增加了,但看上去就像是檢查可用性函數的語法錯誤。

希望我解釋正確的問題。
任何幫助,將不勝感激提前

+0

建議:**使用BOOL而不是字符串'true'和'false'值**。這是布爾設計的大聲笑,而不是字符串:D – Vucko

+0

真的嗎?非常感謝我的建議,我不知道這一點:D,我也嘗試過布爾值,但它的返回值爲true,即使數字不存在於數組中 – Angel

+0

嗯,bool是要走的路,但是你的邏輯在某處出錯了......你'我不會相信它,但它幾乎沒有Java沒有工作:/ – Vucko

回答

0


感謝您能提升不少的東西在你的代碼。我建議這裏的一些變化 -

  1. 可以使用ArrayList而不是primitive array。這將有助於您輕鬆更改內容,因爲您具有該要求。

  2. 他們修改IsAvailableInContactList()返回布爾值true或者基於paramString是否存在於你的contactlistnum或不假 -

    public boolean IsAvailableInContactList(String paramString) { 
    
         if(contactlistnum.contains(paramString)){ 
          return true; 
         } 
        else{ 
         return false; 
        } 
    } 
    
  3. 最後更改AddtoContactList() -

    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 } }

希望這些更改解決您的問題。

+0

謝謝你的回答,我會試試肯定 – Angel

0

這裏真正跳出來的第一件事就是你保持兩個數組存儲數據的方式,這兩個數組都依賴於對方。如果您有聯繫電話號碼,您將永遠有一個名字可以與之聯繫,反之亦然。那麼,爲什麼不創建一個Contact類,像這樣:

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); 
    } 
} 

現在,而不是管理兩個數組和運行的每個陣列上每次你做一些事情時相同的代碼,你只需要一個陣列。

另一點 - 你在問題描述中使用'List'這個詞,爲什麼不把聯繫人存儲在List中,而不是數組?它有很多你以後的功能。

// 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; 
} 

請注意,我還更新了isAvailableInContactList使用一個布爾值,而不是字符串。

+0

謝謝你的回答,其實問題不在於定義數組,它在** isAvailableInContactList **函數,我也使用布爾值,但仍然當我嘗試添加聯繫人時,陣列是空的它崩潰的應用程序。而它應該在** addtoContactList **中的第二個條件之後執行代碼,以防數組上有數字並且我運行該應用程序** isAvailableInContactList **可以檢查可用性但不添加新聯繫人或者如果其爲空 – Angel

+0

當你說'崩潰'時,你能更具體一點嗎?請更新您的帖子,並拋出異常,然後我們可以提供幫助。 –