我想从 ArrayList
填充一个 ListView
。
ArrayList
填充了正确的值。在模拟器上,我得到的是具有值的列表项
packagename ClassName@someNumber
有人遇到同样的问题吗?
public class ExchangeMoneyMKActivity extends Activity {
Document dom;
private static final String METHOD_NAME = "GetExchangeRate";
private static final String NAMESPACE = "http://www.nbrm.mk/klservice/";
private static final String SOAP_ACTION=NAMESPACE+METHOD_NAME;
private static final String URL = "http://www.nbrm.mk/klservice/kurs.asmx?kurs";
ListView lw;
ArrayList<String>currencyShortNames=new ArrayList<String>();
ArrayList<String>currencyRates=new ArrayList<String>();
ArrayList<ExchangeRate> currencyList=new ArrayList<ExchangeRate>();
ArrayAdapter<ExchangeRate> aa;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
currencyShortNames.add("EUR");
currencyShortNames.add("USD");
currencyShortNames.add("GBP");
currencyShortNames.add("CHF");
currencyShortNames.add("SEK");
currencyShortNames.add("NOK");
currencyShortNames.add("JPY");
currencyShortNames.add("DKK");
currencyShortNames.add("CAD");
currencyShortNames.add("AUD");
lw=(ListView)this.findViewById(R.id.listView1);
aa = new ArrayAdapter<ExchangeRate>(
this,android.R.layout.simple_list_item_1,
currencyList);
lw.setAdapter(aa);
callService();
}
private void callService() {
try{
SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
java.util.Date date = new java.util.Date();
request.addProperty("StartDate",dateFormat.format(date));
request.addProperty("EndDate",dateFormat.format(date));
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
//MyXmlParserHandler parser=new MyXmlParserHandler();
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
String resultData = result.toString();
// System.out.println(resultData);
int strStart=resultData.lastIndexOf("schema");
int strStop=resultData.lastIndexOf("dsKurs");
int strLength=strStop-strStart-10;
String responseXML=resultData.substring(strStart+10,strLength);
responseXML.replace("<", "<");
responseXML.replace(">", ">");
String xmlDocument="<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+
"<dsKurs>" +
responseXML +
"</dsKurs>";
System.out.println(xmlDocument);
XMLfromString(resultData);
}catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void XMLfromString(String resultData) throws ParserConfigurationException, SAXException, IOException {
// TODO Auto-generated method stub
InputStream is = new ByteArrayInputStream(resultData.getBytes("UTF-8"));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
try{
dom = db.parse(is);
}catch(Exception e){
System.out.println("Fatal error");
}
dom.getDocumentElement();
NodeList nl = dom.getElementsByTagName("KursZbir");
currencyList.clear();
if (nl != null && nl.getLength() > 0) {
for (int i = 0 ; i < nl.getLength(); i++) {
Element kursZbir = (Element)nl.item(i);
Element sreden = (Element)kursZbir.getElementsByTagName("Sreden").item(0);
currencyRates.add(sreden.getFirstChild().getNodeValue());
}
}
for(int i=0;i<currencyShortNames.size();i++){
currencyList.add(new ExchangeRate(currencyShortNames.get(i).toString(),currencyRates.get(i).toString()));
System.out.println(currencyList.get(i).shName.toString());
System.out.println(currencyList.get(i).Currency.toString());
aa.notifyDataSetChanged();
}
}
}
最佳答案
您实际上需要一个用于 ExchangeRate 的自定义 ArrayAdapter。目前,您的 ListView 不知道要显示 ExchangeRate 的哪个属性,并且可能在每个 Exchange Rate 实例上调用 .toString()
class ExchangeRateAdapter extends ArrayAdapter<ExchangeRate> {
public ExchangeRateAdapter(Context context, ArrayList<ExchangeRate> rate) {
super(context, android.R.layout.simple_spinner_item, rate);
}
public View getView(int position, View convertView, ViewGroup parent)
{
ExchangeRate rate = (ExchangeRate) getItem(position);
TextView view = new TextView(this.getContext());
view.setTextColor(0);
view.setHeight(30);
view.setText(rate.getAmount());
return view;
}
}
然后
aa = new ExchangeRateAdapter();
list.setAdapter(aa);
在getView(..)方法中,代码专门告诉ListView显示Amount,不再显示.toString()
关于android - 没有用 ArrayList 填充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10842163/