我有一段代码用于远程填充自动完成文本视图,一切正常,直到doInBackground,但之后不会调用onProgressUpdate和onPostExecute。我尝试使用@Override注释但Eclipse抱怨删除它,我也读到它不是必需的。有人能告诉我我错过了什么吗?为什么不起作用?
public class MainActivity extends Activity {
private Spinner pricelistSpinner;
private AutoCompleteTextView productsView;
private List<String> pricelist = new ArrayList<String>();
private List<String> products = new ArrayList<String>();
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
productsView = (AutoCompleteTextView) findViewById(R.id.autosuggestProducts);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, products);
adapter.setNotifyOnChange(true);
productsView.setAdapter(adapter);
productsView.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (productsView.getText().toString().length() > 1) {
new PricelistAsyncTask().execute();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class PricelistAsyncTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
HttpClient httpClient = new DefaultHttpClient();
String val = productsView.getText().toString();
HttpGet httpGet = new HttpGet("........" + val);
try {
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
String text = EntityUtils.toString(entity);
if (!text.equals("[]")) {
String pls = text.substring(1, text.length()-1);
List<String> list = Arrays.asList(pls.split(","));
for (int i=0; i<list.size(); i++) {
String prod = list.get(i).substring(1, list.get(i).length()-1);
list.set(i, prod);
}
products.clear();
products.addAll(list);
for (int i=0; i<list.size(); i++) {
Log.d("sometag", products.get(i)); //Works fine till here.
}
}
} catch (Exception e) {
e.printStackTrace();
}
publishProgress();
return null;
}
protected void onProgressUpdate(String... item) {
Log.d("sometag", "Inside onProgressUpdate"); //Not logged, don't know if it is called or not
}
protected void onPostExecute() {
Log.d("sometag", "Inside onPostExecute"); //Not logged, don't know if it is called or not
Toast.makeText(getBaseContext(), "Done!", Toast.LENGTH_SHORT).show(); //not shown
adapter.clear();
adapter.addAll(products);
adapter.notifyDataSetChanged(); //changes don't reflect
}
}
}
答案 0 :(得分:0)
问题在于方法的签名。签名应该是
protected void onPostExecute(Void arg)
protected void onProgressUpdate(Void... void)