2011-03-27 28 views
0

我在理解如何比較Java中的字符串for Android時遇到問題。我已經編寫了代碼在JavaScript和Palm中執行此操作,但是對於Java來說是新的並且有點困惑。舉個例子,我想修改Android開發者網站上的SpinnerActivity示例(http://developer.android.com/resources/samples/Spinner/src/com/android/example/spinner/SpinnerActivity.html)。在我的應用程序中,我正在研究旋轉器而不是行星的管道尺寸。當用戶選擇管道尺寸時,我想引用一系列管道尺寸,並能夠選擇與管道尺寸相關的其他參數,如管道的外徑(OD)。我修改了上面的示例代碼,並添加了管道尺寸和外徑大小的數組。然後我嘗試比較用戶在管道大小微調器中選取的數據與我的管道大小數組,並使用匹配的數組的數量來選擇相關的OD。我試圖進行這種比較的方式有些問題。我將這兩個值都設置爲刺,但他們似乎從未找到彼此。將字符串數組與字符串進行比較並將我的結果發佈到main.xlm

HelloSpinner1.java部分我已經改變爲:

 public void onItemSelected(AdapterView<?> parent, View v, int pos, long row) { 

      HelloSpinner1.this.mPos = pos; 
      HelloSpinner1.this.mSelection = parent.getItemAtPosition(pos).toString(); 
      /* 
      * Set the value of the text field in the UI 
      */ 
      TextView resultText = (TextView)findViewById(R.id.SpinnerResult); 
      resultText.setText(HelloSpinner1.this.mSelection); 

      String[] OD;    // array of pipe ODs 
      OD = new String[30];  // allocates memory for 30 floating point numbers 
      OD[0] = "0.405"; 
      OD[1] = "0.540"; 
      OD[2] = "0.675"; 
      OD[3] = "0.840"; 
      OD[4] = "1.050"; 
      OD[5] = "1.315"; 
      OD[6] = "1.660"; 
      OD[7] = "1.9"; 
      OD[8] = "2.375"; 
      OD[9] = "2.875"; 
      OD[10] = "3.5"; 
      OD[11] = "4"; 
      OD[12] = "4.5"; 
      OD[13] = "5.563"; 
      OD[14] = "6.625"; 
      OD[15] = "8.625"; 
      OD[16] = "10.750"; 
      OD[17] = "12.75"; 
      OD[18] = "14"; 
      OD[19] = "16"; 
      OD[20] = "18"; 
      OD[21] = "20"; 
      OD[22] = "22"; 
      OD[23] = "24"; 
      OD[24] = "26"; 
      OD[25] = "28"; 
      OD[26] = "30"; 
      OD[27] = "32"; 
      OD[28] = "34"; 
      OD[29] = "36"; 


String [] Size; 
Size = new String [30]; 
      Size[0] = "1/8"; 
      Size[1] = "1/4"; 
      Size[2] = "3/8"; 
      Size[3] = "1/2"; 
      Size[4] = "3/4"; 
      Size[5] = "1"; 
      Size[6] = "1-1/4"; 
      Size[7] = "1-1/2"; 
      Size[8] = "2"; 
      Size[9] = "2-1/2"; 
      Size[10] = "3"; 
      Size[11] = "3-1/2"; 
      Size[12] = "4"; 
      Size[13] = "5"; 
      Size[14] = "6"; 
      Size[15] = "8"; 
      Size[16] = "10"; 
      Size[17] = "12"; 
      Size[18] = "14"; 
      Size[19] = "16"; 
      Size[20] = "18"; 
      Size[21] = "20"; 
      Size[22] = "22"; 
      Size[23] = "24"; 
      Size[24] = "26"; 
      Size[25] = "28"; 
      Size[26] = "30"; 
      Size[27] = "32"; 
      Size[28] = "34"; 
      Size[29] = "36"; 



      String ODSize; 

      for (int i = 0; i <= 29; i++){ 
        if (Size.equals("HelloSpinner1.this.mSelection")) { 
        ODSize = OD[i]; 
        break; 
        } 
       } 

     } 

關聯的strings.xml rorm android的網站稍作修改爲:

管道和管件
1/8 1/4 3/8 3/4 1-1/4 1-1/2 2-1/2 3-1/2 選擇一個管道尺寸

回答

0

只是一個快速的音符,但我在這裏看到了兩兩件事:

1)你有引號「HelloSpinner1.this.mSelection」。在.equals裏面,那就是將你的變量Size直接與該字符串進行比較......而不是存儲在該對象中的值。例如,你問:「1/8」?=「HelloSpinner1.this.mSelection」...不是,「1/8」?=「1/4」在這種情況下。這可能是你的大部分問題。

2)你可以在Listener方法中使用微調器的位置。這給你在微調選擇的位置。如果你沒有修改這些值,你就已經知道數組中的索引了。如果你正在修改它們,那麼/你可以做一個字符串比較(或者同時修改你的數組來保持它們是最新的)。

一旦消除引號問題,您可能還想檢查一下您的比較結果。一個非常簡單的方法是爲每個值聲明一個字符串,然後在調試器中運行它或記錄輸出。

最後,作爲個人偏好,我不喜歡存儲不會在xml文件中更改的長數組。只需將它編碼爲一個不需要稍後解釋的數組即可。這會直接給你數組的訪問權限,並加快執行速度。

+0

我用你的選擇2),它完美的工作。不要真正理解你的意思,「只需將代碼編寫成一個不需要稍後解釋的數組」,但我又是新手。再次感謝您的幫助,非常有價值。 – 63alfred 2011-03-27 08:49:25

+0

我不確定你是如何在內部存儲數據的(這很好)。但我建議,如果你有一個不會改變的值的數組,那麼把它作爲需要這些值的類的一部分,而不是xml中的字符串數組。 IE:在你的代碼中:String [] myArr = new String [20];將值設置爲一次,並且您將有權訪問它們,而您的代碼不必將xml字符串數組解釋爲數字。你用外徑做了這個(儘管你應該把它定義在其他地方而不是在方法中,所以它不會被創建一堆)。 – AndyMac 2011-03-27 15:38:27

+0

在進一步的檢查中,你使用的字符串數組作爲微調文本,我假設?即使如此,您可以將這些尺寸的內部陣列設置爲雙倍,以便您可以將管道尺寸與外徑相比倍增得多。無論哪種方式,只是一個改進建議。 – AndyMac 2011-03-27 15:39:30

相關問題