2012-07-06 82 views
0

使用Android(Eclipse)我正在嘗試讀取.csv文件並動態地使用掃描儀填充微調器 。嘗試了許多方法,結果相同。 模擬器顯示微調,但只填寫最後一個逗號和價格。還需要 將所有三個變量存儲在數組中,並在爲了填充EditText字段而進行微調器選擇 時對其進行回收。任何幫助將不勝感激...使用掃描器從CSV文件填充微調器

數據文件記錄:

4,鋁罐,0.55 5,車輛用cat變換器,9.00 18,黃銅(倒反紅色/黃色),. 20 1001 扣除客戶#查找,-2.00

的Java:

public class BRprogramActivity extends Activity { 
    private static final String TAG = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     // 
     Button addButton; 
     Button editButton; 
     Button sendButton; 
     // 
     Spinner array_spinner; 
     // 
     //  activate soft Keyboard 
     this.getWindow().setSoftInputMode 
     (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
     // 
     //  .csv comma separated values file 
     //   
     try { 
      Scanner scanner = new Scanner(getResources().openRawResource(R.raw.brdata)); 
      //   
      while (scanner.hasNext()) { 
       String data = (scanner.next()); 
       String [] values = data.split(","); 
       item = values[0];    
       description = values[1]; 
       price = values[2];  
       // 
       array_spinner = (Spinner)findViewById(R.id.spinner1);   
       ArrayAdapter<String> adapter = new ArrayAdapter<String> 
       (this,android.R.layout.simple_spinner_item,values); 
       array_spinner.setAdapter(adapter); 
      }  
      scanner.close(); 

     } catch (Exception e) { 
      Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); 
     } 
     // 
     addButton = (Button) findViewById(R.id.addbutton); 

     addButton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v){ 
       Log.v("test", "ADD button clicked"); 
      } 
     }); 
     // 
     editButton = (Button) findViewById(R.id.editbutton); 

     editButton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v){ 
       Log.v("test", "EDIT button clicked"); 
      } 
     });  
     // 
     sendButton = (Button) findViewById(R.id.sendbutton); 

     sendButton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v){ 
       Log.v("test", "SEND button clicked"); 
      } 
     }); 
    } 
} 

回答

0

如果你想在微調上一行顯示您的CSV的每一行,試試這個:

List<String> list = new ArrayList<String>(); 
while (scanner.hasNext()) { 
    list.add(scanner.next()); 
} 

array_spinner = (Spinner)findViewById(R.id.spinner1);   
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); 
array_spinner.setAdapter(adapter); 

雖然對普通用戶的可讀性差,也許你只是想顯示的描述和價格:

List<String> list = new ArrayList<String>(); 
while (scanner.hasNext()) { 
    String data = scanner.next(); 
    String [] values = data.split(","); 
    list.add(values[1] + " $" + values[2]); 
}  

您發佈的方法只顯示最後一個CSV行,因爲你正在創造一個新的ArrayAdapter CSV中的每一行和都覆蓋了您以前創建的適配器。

通過將掃描儀的結果存儲在列表中並將適配器的定義移出掃描儀循環,您應該能夠看到您希望的結果。從評論

加成

的OutOfBounds例外與長度= 2,索引= 2表明,您的真實CSV至少一行僅具有兩個值(一個逗號)。爲了幫助您找到該行試試這個:

if(values.length != 3) 
    Log.v("Example", "Malformed row: " + data); 
else 
    list.add(values[1] + " $" + values[2]); 

而且,我忘了提,你不設置下拉布局的微調。這將不會導致該應用崩潰,但是這產生了標準用戶界面:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
+0

修改後的代碼的建議和表示的logcat上陣列,java.Lang.ArrayIndexOutOfBoundsException異常錯誤:長度= 2,索引= 2。樣品記錄s/b 4,鋁罐,.55。 – John 2012-07-06 21:21:17

+0

也沒有數據填充Spinner – John 2012-07-06 21:27:08

+0

@John我更新了我的答案。 – Sam 2012-07-06 23:22:13