我正在编写一个应用程序,需要从用户获取输入,将其传递到服务器,该服务器返回
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);