2012-07-06 35 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