简体   繁体   English

如何返回从 AsyncTask 设置的值?

[英]How to return a value that is being set from an AsyncTask?

I am trying to return an Object of type Movie from this method.我试图从这个方法返回一个 Movie 类型的对象。

public MovieParty getMovie(String id) {
    public Movie movie;

    //Create AsyncTask
    connection = new getMovieTask(new RestObserver() {

        @Override
        public void downloadFinished(String result) {
            try {
                //parse the JSON string here and assign it to movie; 
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });

    connection.execute(id);

    return movie
}

getMovieTask extends AsyncTask. getMovieTask 扩展了 AsyncTask。

I am running downloadFinihsed() in onPostExecute in the async task.我在异步任务的onPostExecute中运行downloadFinihsed() I have read just about everything I can on the matter but I still can't figure out how to properly execute that " return movie " as it would not have been assigned yet.我已经阅读了关于此事的几乎所有内容,但我仍然无法弄清楚如何正确执行那个“ return movie ”,因为它还没有被分配。

A quick Example what you could do:一个简单的例子,你可以做什么:

Create a custom Listener:创建自定义侦听器:

interface MovieLoadListener{
    void onMovieLoaded(Movie movie);
    void onMovieLoadFailed(Exception e);
}

Change your method:改变你的方法:

public void loadMovieAsync(String id,final  MovieLoadListener listener) {

//Create AsyncTask
connection = new getMovieTask(new RestObserver() {

    @Override
    public void downloadFinished(String result) {
        Movie movie;

        try {
            // do your parsing stuff

            listener.onMovieLoadFailed(e);
        }
        catch (JSONException e) {
            e.printStackTrace();
            listener.onMovieLoadFailed(e);
        }
    }
});

connection.execute(id);
}

Call your method:调用你的方法:

loadMovieAsync(id, new MovieLoadListener() {
        @Override
        public void onMovieLoaded(Movie movie) {
            // do with your movie what you like here
        }

        @Override
        public void onMovieLoadFailed(Exception e) {
             // error handling
        }
    } );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM