I want to fill my AutoComplete textView with data from web. Howevere, despite asynctask returns me the correct data, autocompletetextview is not updated. Can you help me to fix this problem?
Activity
public class FirstTab extends Activity implements OnClickListener,GetStreetNamesInterface{
private ArrayAdapter<String> adapterStreenNames;
private List<String> streetList = new ArrayList<String>();
private AutoCompleteTextView userInput;
userInput = (AutoCompleteTextView) promptsView
.findViewById(R.id.editTextDialogUserInput);
adapterStreenNames = new ArrayAdapter<String>(FirstTab.this,
android.R.layout.simple_list_item_1, streetList);
userInput.setAdapter(adapterStreenNames);
userInput
.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
UILApplication.street = userInput.getText()
.toString();
}
});
userInput.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
GetStreetNames task = new GetStreetNames(FirstTab.this);
task.execute(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
@Override
public void onGetStreetNamesInterface(List<String> result) {
if(result!=null && result.size()>0){
streetList.clear();
streetList.addAll(result);
adapterStreenNames.notifyDataSetChanged();
Log.d("streets","updated");
for(String s:streetList){
Log.d("streets",s);
}
}
}
AsyncTask
public class GetStreetNames extends AsyncTask<String,Void,String> {
private GetStreetNamesInterface callback;
public GetStreetNames(GetStreetNamesInterface callback){
this.callback=callback;
}
@Override
protected String doInBackground(String... params) {
UserFunctions u = new UserFunctions();
return u.getStreetName(params[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
List<String> options = new ArrayList<String>();
if(result!=null && result.length()>0){
String[] parts = result.split("\n");
for (int i=0; i<parts.length;i+=2){
String[] element = parts[i].split("\\|");
options.add(element[1]);
}
callback.onGetStreetNamesInterface(options);
}
else{
callback.onGetStreetNamesInterface(null);
}
}
}
interface
public interface GetStreetNamesInterface {
public void onGetStreetNamesInterface(List<String> result);
}