I have the following block of code based on an asynctask. I'm trying to return a List variable via return LoadFeed() and the return type of doInBackground is String. If I change the return type of doInBackground from String to List then I get an error
"The return type is incompatible with AsyncTask<String,Void,String>.doInBackground(String[])"
How do I fix this error? Please help
Thanks,
private class DispData extends AsyncTask<String, Void, String> {
private final ProgressDialog dialog = new ProgressDialog(MessageList.this);
// can use UI thread here
protected void onPreExecute() {
dialog.setMessage("Fetching scores...");
dialog.show();
}
// automatically done on worker thread (separate from UI thread)
protected String doInBackground(final String... args) {
return loadFeed();
}
// can use UI thread here
prot开发者_JS百科ected void onPostExecute(final List<String> result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
adapter =
new ArrayAdapter<String>(MessageList.this,R.layout.row,result);
MessageList.this.setListAdapter(adapter);
}
}
Change your class definition to:
class DispData extends AsyncTask<String, Object, List<String>>
This will force the doInBackground declaration to become:
protected List<String> doInBackground(String... arg);
First, you really should add @Override
annotations to your onPreExecute()
, doInBackground()
, and onPostExecute()
methods. On an AsyncTask
, this is critical to help you keep track of all the data types.
Then, if you want doInBackground()
to return List<String>
, you need to change it both in doInBackground()
and in your AsyncTask
declaration (the third data type will need to change from String
to List<String>
), to go along with your change that you already made to onPostExecute()
.
精彩评论