我试图将我的数组soap动作结果显示到listview。我设法检索项目并将其存储为字符串,但是,我似乎无法将所有字符串放入listview。我做错了什么?当我Log.d时,它以正确的顺序显示所有内容(这就是我想要的)。但是当我将它添加到我的SearchResults时,它只显示最后的细节。
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject)envelope.getResponse();
for (int i = 0; i < response.getPropertyCount(); i++) {
Object property = response.getProperty(i);
if (property instanceof SoapObject) {
ArrayList<SearchResults> results = new ArrayList<SearchResults>();
SearchResults sr1 = new SearchResults();
SoapObject info = (SoapObject) property;
String description = info.getProperty("description").toString();
String name = info.getProperty("name").toString();
String date = info.getProperty("date").toString();
Log.d("This is the list of id:",description);
Log.d("This is the list of name:",name);
Log.d("This is the list of date:",date);
sr1.setDescription(description);
sr1.setName(name);
sr1.setDate(date);
results.add(sr1);
final ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MyCustomBaseAdapter(this, results));
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object object = lv1.getItemAtPosition(position);
SearchResults fullObject = (SearchResults)object;
Toast.makeText(second.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show();
// return;
}
});
}
}
}
答案 0 :(得分:1)
这是因为您每次在ArrayList
内创建一个新的for loop
,因此它会覆盖创建的ArrayList
内的最后一个数据。
应该是,
ArrayList<SearchResults> results = new ArrayList<SearchResults>();
for (int i = 0; i < response.getPropertyCount(); i++) {
SearchResults sr1 = new SearchResults();
// fetch results
}
// update the List
ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MyCustomBaseAdapter(this, results));
答案 1 :(得分:0)
试试这个: 我已经更改了代码。因为listview适配器将结果绑定到循环外部。
ArrayList<SearchResults> results = new ArrayList<SearchResults>();
for (int i = 0; i < response.getPropertyCount(); i++) {
Object property = response.getProperty(i);
if (property instanceof SoapObject) {
SearchResults sr1 = new SearchResults();
SoapObject info = (SoapObject) property;
String description = info.getProperty("description").toString();
String name = info.getProperty("name").toString();
String date = info.getProperty("date").toString();
Log.d("This is the list of id:",description);
Log.d("This is the list of name:",name);
Log.d("This is the list of date:",date);
sr1.setDescription(description);
sr1.setName(name);
sr1.setDate(date);
results.add(sr1);
}
}
final ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MyCustomBaseAdapter(this, results));
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object object = lv1.getItemAtPosition(position);
SearchResults fullObject = (SearchResults)object;
Toast.makeText(second.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show();
// return;
}
});
}