Not understanding why AsyncTask is giving me an incompatible type
I'm trying to get access into my database in the background so that i don't lock the threads and get an error, so i read i should use AsyncTask. from what i read up on it takes uses 3 data types. The data type it takes in, the data type it processes, and the return data type. so here im making a step tracker and want to access my database to get something by id, so i call my repository and pass in the database i'm using and the id i want to find
cStep = stepRepository.getStepById(stepDatabase,0);
and this here is my repository class and the AsyncTask within it
> public class StepRepository implements IStepDataSource
private IStepDataSource mLocalDataSource;
private static StepRepository mInstance;
public StepRepository(IStepDataSource mLocalDataSource)
this.mLocalDataSource = mLocalDataSource;
public static StepRepository getInstance(IStepDataSource mLocalDataSource)
if(mInstance == null)
mInstance = new StepRepository(mLocalDataSource);
return mInstance;
@Override
public Flowable<List<Step>> getAllSteps()
return mLocalDataSource.getAllSteps();
@Override
public Step getStepById(StepDatabase db, int userId)
return new getAsyncTask(db).execute(userId);
private static class getAsyncTask extends AsyncTask<Integer, Void, Step>
getAsyncTask(StepDatabase db)
this.db = db;
@Override
protected Step doInBackground(Integer... params)
StepDao dao = db.stepDao();
return dao.getStepById(params[0]);
@Override
protected void onPostExecute(Step step)
@Override
public void insertStep(Step... steps)
mLocalDataSource.insertStep(steps);
@Override
public void updateStep(Step... steps)
mLocalDataSource.updateStep(steps);
@Override
public void deleteStep(Step step)
mLocalDataSource.deleteStep(step);
im not getting why getUserByid is giving me imcopatible type since AsyncTask takes in and interger and returns a steps which is what i want??
btw if its any help this is the IStepDataSource my repository implements
public interface IStepDataSource
Flowable<List<Step>> getAllSteps();
Step getStepById(StepDatabase db, int userId);
void insertStep(Step... steps);
void updateStep(Step... steps);
void deleteStep(Step step);
android multithreading android-studio asynchronous android-asynctask
add a comment |
I'm trying to get access into my database in the background so that i don't lock the threads and get an error, so i read i should use AsyncTask. from what i read up on it takes uses 3 data types. The data type it takes in, the data type it processes, and the return data type. so here im making a step tracker and want to access my database to get something by id, so i call my repository and pass in the database i'm using and the id i want to find
cStep = stepRepository.getStepById(stepDatabase,0);
and this here is my repository class and the AsyncTask within it
> public class StepRepository implements IStepDataSource
private IStepDataSource mLocalDataSource;
private static StepRepository mInstance;
public StepRepository(IStepDataSource mLocalDataSource)
this.mLocalDataSource = mLocalDataSource;
public static StepRepository getInstance(IStepDataSource mLocalDataSource)
if(mInstance == null)
mInstance = new StepRepository(mLocalDataSource);
return mInstance;
@Override
public Flowable<List<Step>> getAllSteps()
return mLocalDataSource.getAllSteps();
@Override
public Step getStepById(StepDatabase db, int userId)
return new getAsyncTask(db).execute(userId);
private static class getAsyncTask extends AsyncTask<Integer, Void, Step>
getAsyncTask(StepDatabase db)
this.db = db;
@Override
protected Step doInBackground(Integer... params)
StepDao dao = db.stepDao();
return dao.getStepById(params[0]);
@Override
protected void onPostExecute(Step step)
@Override
public void insertStep(Step... steps)
mLocalDataSource.insertStep(steps);
@Override
public void updateStep(Step... steps)
mLocalDataSource.updateStep(steps);
@Override
public void deleteStep(Step step)
mLocalDataSource.deleteStep(step);
im not getting why getUserByid is giving me imcopatible type since AsyncTask takes in and interger and returns a steps which is what i want??
btw if its any help this is the IStepDataSource my repository implements
public interface IStepDataSource
Flowable<List<Step>> getAllSteps();
Step getStepById(StepDatabase db, int userId);
void insertStep(Step... steps);
void updateStep(Step... steps);
void deleteStep(Step step);
android multithreading android-studio asynchronous android-asynctask
2
You've misunderstood the usage of it, please see stackoverflow.com/questions/9671546/asynctask-android-example
– TWL
Nov 12 '18 at 20:14
add a comment |
I'm trying to get access into my database in the background so that i don't lock the threads and get an error, so i read i should use AsyncTask. from what i read up on it takes uses 3 data types. The data type it takes in, the data type it processes, and the return data type. so here im making a step tracker and want to access my database to get something by id, so i call my repository and pass in the database i'm using and the id i want to find
cStep = stepRepository.getStepById(stepDatabase,0);
and this here is my repository class and the AsyncTask within it
> public class StepRepository implements IStepDataSource
private IStepDataSource mLocalDataSource;
private static StepRepository mInstance;
public StepRepository(IStepDataSource mLocalDataSource)
this.mLocalDataSource = mLocalDataSource;
public static StepRepository getInstance(IStepDataSource mLocalDataSource)
if(mInstance == null)
mInstance = new StepRepository(mLocalDataSource);
return mInstance;
@Override
public Flowable<List<Step>> getAllSteps()
return mLocalDataSource.getAllSteps();
@Override
public Step getStepById(StepDatabase db, int userId)
return new getAsyncTask(db).execute(userId);
private static class getAsyncTask extends AsyncTask<Integer, Void, Step>
getAsyncTask(StepDatabase db)
this.db = db;
@Override
protected Step doInBackground(Integer... params)
StepDao dao = db.stepDao();
return dao.getStepById(params[0]);
@Override
protected void onPostExecute(Step step)
@Override
public void insertStep(Step... steps)
mLocalDataSource.insertStep(steps);
@Override
public void updateStep(Step... steps)
mLocalDataSource.updateStep(steps);
@Override
public void deleteStep(Step step)
mLocalDataSource.deleteStep(step);
im not getting why getUserByid is giving me imcopatible type since AsyncTask takes in and interger and returns a steps which is what i want??
btw if its any help this is the IStepDataSource my repository implements
public interface IStepDataSource
Flowable<List<Step>> getAllSteps();
Step getStepById(StepDatabase db, int userId);
void insertStep(Step... steps);
void updateStep(Step... steps);
void deleteStep(Step step);
android multithreading android-studio asynchronous android-asynctask
I'm trying to get access into my database in the background so that i don't lock the threads and get an error, so i read i should use AsyncTask. from what i read up on it takes uses 3 data types. The data type it takes in, the data type it processes, and the return data type. so here im making a step tracker and want to access my database to get something by id, so i call my repository and pass in the database i'm using and the id i want to find
cStep = stepRepository.getStepById(stepDatabase,0);
and this here is my repository class and the AsyncTask within it
> public class StepRepository implements IStepDataSource
private IStepDataSource mLocalDataSource;
private static StepRepository mInstance;
public StepRepository(IStepDataSource mLocalDataSource)
this.mLocalDataSource = mLocalDataSource;
public static StepRepository getInstance(IStepDataSource mLocalDataSource)
if(mInstance == null)
mInstance = new StepRepository(mLocalDataSource);
return mInstance;
@Override
public Flowable<List<Step>> getAllSteps()
return mLocalDataSource.getAllSteps();
@Override
public Step getStepById(StepDatabase db, int userId)
return new getAsyncTask(db).execute(userId);
private static class getAsyncTask extends AsyncTask<Integer, Void, Step>
getAsyncTask(StepDatabase db)
this.db = db;
@Override
protected Step doInBackground(Integer... params)
StepDao dao = db.stepDao();
return dao.getStepById(params[0]);
@Override
protected void onPostExecute(Step step)
@Override
public void insertStep(Step... steps)
mLocalDataSource.insertStep(steps);
@Override
public void updateStep(Step... steps)
mLocalDataSource.updateStep(steps);
@Override
public void deleteStep(Step step)
mLocalDataSource.deleteStep(step);
im not getting why getUserByid is giving me imcopatible type since AsyncTask takes in and interger and returns a steps which is what i want??
btw if its any help this is the IStepDataSource my repository implements
public interface IStepDataSource
Flowable<List<Step>> getAllSteps();
Step getStepById(StepDatabase db, int userId);
void insertStep(Step... steps);
void updateStep(Step... steps);
void deleteStep(Step step);
android multithreading android-studio asynchronous android-asynctask
android multithreading android-studio asynchronous android-asynctask
asked Nov 12 '18 at 19:41
cooldude22cooldude22
176
176
2
You've misunderstood the usage of it, please see stackoverflow.com/questions/9671546/asynctask-android-example
– TWL
Nov 12 '18 at 20:14
add a comment |
2
You've misunderstood the usage of it, please see stackoverflow.com/questions/9671546/asynctask-android-example
– TWL
Nov 12 '18 at 20:14
2
2
You've misunderstood the usage of it, please see stackoverflow.com/questions/9671546/asynctask-android-example
– TWL
Nov 12 '18 at 20:14
You've misunderstood the usage of it, please see stackoverflow.com/questions/9671546/asynctask-android-example
– TWL
Nov 12 '18 at 20:14
add a comment |
1 Answer
1
active
oldest
votes
The execute() method of AsyncTask returns void and your are attempting to return a void from a method declared as returning Step. It's probably best to get the AsyncTask out of the getStepById() method and instead use an AsyncTask where you invoke getStepById(). I think you're assuming that execute() blocks until the task is complete and that is incorrect. If this were the case, there'd be no point to using AsyncTask. execute() returns immediately and onPostExecute(Step step) is where the results should be processed/displayed/whatever.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53269023%2fnot-understanding-why-asynctask-is-giving-me-an-incompatible-type%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The execute() method of AsyncTask returns void and your are attempting to return a void from a method declared as returning Step. It's probably best to get the AsyncTask out of the getStepById() method and instead use an AsyncTask where you invoke getStepById(). I think you're assuming that execute() blocks until the task is complete and that is incorrect. If this were the case, there'd be no point to using AsyncTask. execute() returns immediately and onPostExecute(Step step) is where the results should be processed/displayed/whatever.
add a comment |
The execute() method of AsyncTask returns void and your are attempting to return a void from a method declared as returning Step. It's probably best to get the AsyncTask out of the getStepById() method and instead use an AsyncTask where you invoke getStepById(). I think you're assuming that execute() blocks until the task is complete and that is incorrect. If this were the case, there'd be no point to using AsyncTask. execute() returns immediately and onPostExecute(Step step) is where the results should be processed/displayed/whatever.
add a comment |
The execute() method of AsyncTask returns void and your are attempting to return a void from a method declared as returning Step. It's probably best to get the AsyncTask out of the getStepById() method and instead use an AsyncTask where you invoke getStepById(). I think you're assuming that execute() blocks until the task is complete and that is incorrect. If this were the case, there'd be no point to using AsyncTask. execute() returns immediately and onPostExecute(Step step) is where the results should be processed/displayed/whatever.
The execute() method of AsyncTask returns void and your are attempting to return a void from a method declared as returning Step. It's probably best to get the AsyncTask out of the getStepById() method and instead use an AsyncTask where you invoke getStepById(). I think you're assuming that execute() blocks until the task is complete and that is incorrect. If this were the case, there'd be no point to using AsyncTask. execute() returns immediately and onPostExecute(Step step) is where the results should be processed/displayed/whatever.
answered Nov 12 '18 at 21:08
Greg MoensGreg Moens
48218
48218
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53269023%2fnot-understanding-why-asynctask-is-giving-me-an-incompatible-type%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
You've misunderstood the usage of it, please see stackoverflow.com/questions/9671546/asynctask-android-example
– TWL
Nov 12 '18 at 20:14