我正在编写一个应用程序,需要从用户那里获取输入,将其传递给服务器,服务器返回一个JSON字符串,然后在ListView中显示其解析后的内容。目前,我是通过扩展AsyncTask来实现这一点:
//stripped down version
public class main extends ListActivity {
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
final EditText input = (EditText)findViewById(R.id.input);
input.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!input.getText().toString().equals("")) {
new GetDataTask().execute(input.getText().toString());
}
}
});
private class GetDataTask extends AsyncTask<String, Void, ArrayList<String>> {
protected ArrayList<String> doInBackground(String... query) {
URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere");
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
ArrayList<String> items = new ArrayList<String>();
//the code that parses the JSON goes here; it writes some strings to items
return items;
}
protected void onPostExecute(ArrayList<String> items) {
listItems = items;
adapter.notifyDataSetChanged();
}
}
}
这是我的第一篇帖子,所以如果我尝试将其变成代码块的尝试失败了,我提前道歉。
在onPostExecute方法中,在将listItems设置为items后,如果我打印出listItems的内容,它们正是我想要的。但是,由于某种原因,当从onPostExecute执行时,adapter.notifyDataSetChanged()似乎没有起到任何作用(当它从主线程调用时,它可以正常工作)。
如果有人知道发生了什么或如何解决它,我会非常感激。谢谢!