You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:15:47