如何修复无法在未调用 Looper.prepare() 的线程中创建处理程序



为什么我在这里得到:Can't create handler inside thread that has not called Looper.prepare()错误?

public class MovieInterface extends AsyncTask<String, Void, MovieResultsPage> {
public Activity activity;
MovieInterface(Activity context) {
this.activity = context;
}
public void handleUpcomingMovies() {
}
@Override
protected MovieResultsPage doInBackground(String... strings) {
TmdbMovies movies = new TmdbApi("d2e5d02fe295efc00bad8da4dc384edf").getMovies();
MovieResultsPage upcomingMovies = movies.getUpcoming(null, 1, "IN");
int totalpages = upcomingMovies.getTotalPages();
return upcomingMovies;
}

@Override
protected void onPostExecute(final MovieResultsPage movieDbs) {
super.onPostExecute(movieDbs);
ArrayList<MovieClass> mymovielist = new ArrayList<>();
for (MovieDb movieResult : movieDbs.getResults()) {
mymovielist.add(new MovieClass(movieResult.getTitle(), movieResult.getOverview()));
}
MovieAdapter movieClassArrayAdapter = new MovieAdapter(activity, R.layout.movie_list_item, mymovielist);
((ListView) activity.findViewById(R.id.upcomingMoviesList)).setAdapter(movieClassArrayAdapter);
}

方法调用 :

MovieInterface movieInterface = new MovieInterface(this) ;
movieInterface.execute() ;

正如类似问题的其他答案一样,我没有在后台方法中进行任何UI更新。但仍然收到错误。

我是安卓和Java的新手。我该如何解决这个问题?

new Handler(Looper.getMainLooper())

文档中的更多详细信息。

在新线程的run()方法中调用looper.prepare()

如果线程不存在,Handler无法将MessagesRunnables调度到线程的Looper。请参阅官方文档中的以下内容。

onPostExecute(( 在主 UI 线程上调用。尝试删除 runOnUiThread(( 调用。有关 AsyncTask 的更多详细信息,请参阅 https://developer.android.com/reference/android/os/AsyncTask

罪魁祸首可能是doInBackground方法中的方法调用之一。 尝试在UIThread上运行它们:

runOnUiThread(new Runnable() {
@Override
public void run() {
TmdbMovies movies = new TmdbApi("d2e5d02fe295efc00bad8da4dc384edf").getMovies();
MovieResultsPage upcomingMovies = movies.getUpcoming(null, 1, "IN");
int totalpages = upcomingMovies.getTotalPages();
return upcomingMovies;
}
});

最新更新