Android设备OkHttp致命异常:ViewPager设适配器致三星平板崩溃
视频流应用在Android 12L三星平板上崩溃问题分析
我正在开发一款视频流复刻应用,该应用在模拟器中运行完全正常,但在运行Android 12L的三星平板上99%的概率会崩溃。注释掉代码bannerMoviesViewPager.setAdapter(bannerMoviesPagerAdapter);后,应用就能100%正常运行。希望有人帮忙分析崩溃原因,以及为何模拟器不会出现该问题。已确认未重复读取响应体。
相关代码片段
设置ViewPager适配器的方法
private void setBannerMoviesPagerAdapter(List<BannerMovies> bannerMoviesList){ bannerMoviesViewPager = (ViewPager) findViewById(R.id.banner_viewPager); bannerMoviesPagerAdapter = new BannerMoviesPagerAdapter(this, bannerMoviesList); bannerMoviesViewPager.setAdapter(bannerMoviesPagerAdapter); // 注释此行即可正常运行 //tabLayout.setupWithViewPager(bannerMoviesViewPager); Timer sliderTimer = new Timer(); sliderTimer.scheduleAtFixedRate(new AutoSlider(), 4000, 6000); tabLayout.setupWithViewPager(bannerMoviesViewPager, true); }
网络请求获取数据的方法
public void fetch_json_banner_list(){ System.out.println("Attempting to fetch JSON"); final String url = "http://*serverIP*:80/api/movie"; Request request = new Request.Builder().url(url).build(); OkHttpClient client = new OkHttpClient(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { System.out.println("Failed to execute request"); } @Override public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { bannerMoviesList = new ArrayList<>(); String body = response.body().string(); Gson gson = new GsonBuilder().create(); Type allFilmsType = new TypeToken<ArrayList<Film>>(){}.getType(); List<Film> allFilms = gson.fromJson(body, allFilmsType); for(Film film : allFilms){ System.out.println(film.getArtwork()); System.out.println(film.getArtwork().equals("https://media.movieassets.com/static/images/items/movies/posters/216767680a8a72fff4a12c484c6ac589.jpg")); bannerMoviesList.add(new BannerMovies(film.getMovieId(), film.getTitle(), film.getSynopsis(), film.getArtwork().trim(), "https://ia800306.us.archive.org/35/items/PopeyeAliBaba/PopeyeAliBaba_512kb.mp4")); } setBannerMoviesPagerAdapter(bannerMoviesList); } }); }
ViewPager适配器类
public class BannerMoviesPagerAdapter extends PagerAdapter { Context context; List<BannerMovies> bannerMoviesList; public BannerMoviesPagerAdapter(Context context, List<BannerMovies> bannerMoviesList) { this.context = context; this.bannerMoviesList = bannerMoviesList; System.out.println("GETS HERE...."); } @Override public int getCount() { return bannerMoviesList.size(); } }
崩溃日志信息
崩溃时抛出异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
内容的提问来源于stack exchange,提问作者Ian Nemo
相关产品推荐
相关产品推荐

