我正在编写一个应用程序,需要从用户获取输入,将其传递到服务器,该服务器返回
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等于项目后,如果我打印listItems的内容,它们正是我想要的.但是,由于某些原因,当从onPostExecute执行时,adapter.notifyDataSetChanged()似乎什么都不做(当它从主线程调用时,它工作正常).
如果有任何人知道发生了什么和/或如何解决它,我真的很感激.谢谢!
解决方法
你可以试试吗
protected void onPostExecute(ArrayList<String> items) { listItems.clear(); listItems.addAll(items); adapter.notifyDataSetChanged(); }
我希望你已经在做这件事了
adapter = new ArrayAdapter<String>(listItems);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。