[英]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.