在下面的代码中,列表视图不显示来自RSS Feed的文本:
public class MainActivity extends ListActivity {
ArrayList<String> values = new ArrayList<>();
ArrayList<String> tags = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
URL url = new URL("http://appline.ir/index.php/android.feed?limitstart=");
new Connect(url).execute();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class Connect extends AsyncTask <Void, String, String>
{
URL url;
ProgressDialog diao;
Connect(URL url)
{
this.url = url;
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
diao.hide();
setListAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, values));
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
diao = new ProgressDialog(MainActivity.this);
diao.setMessage("connecting...");
diao.setIndeterminate(true);
diao.show();
}
@Override
protected String doInBackground(Void... params)
{
try
{
XmlPullParserFactory parser =XmlPullParserFactory.newInstance();
XmlPullParser xml = parser.newPullParser();
URL url = new URL("http://appline.ir/index.php/android.feed?limitstart=");
XmlParser p = new XmlParser(url);
tags = p.parse();
InputStream input = url.openStream();
xml.setInput(input,null);
int event;
String text = null;
try {
event = xml.getEventType();
while (event != XmlPullParser.END_DOCUMENT)
{
String name=xml.getName();
switch (event)
{
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
text = xml.getText();
break;
case XmlPullParser.END_TAG:
if(name.equals("title")){
values.add(text);
}
else if(name.equals("link")){
// link = text;
}
else if(name.equals("description")){
// description = text;
}
else{
}
break;
}
event = xml.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
catch(Exception e)
{
}
return null;
}
}
}
但是当我将Xml解析部分放入MainActivity
(使用StrictMode
)时,列表会正确显示文本。
我找不到问题。如何解决这个问题?
答案 0 :(得分:1)
您必须在notifyDataSetChanged()
上致电Adapter
,并且必须在UI主线程中调用
答案 1 :(得分:0)
尝试将适配器对象分配给变量并调用notifyDataSetChanged()
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
adapter.notifyDataSetChanged();