繁体   English   中英

Android:如何使用CountDownLatch?

[英]Android: How to use CountDownLatch?

我有一个从api请求数据并填充数组列表的函数。 然后,我在textView中使用来自arraylist的数据。 发生的问题是该函数需要花费一些时间来加载数据,并且我在其中设置文本视图的代码在填充arraylist之前会被执行,从而导致崩溃...我已经使用Countdown闩锁解决了此问题,但事实并非如此工作,我用错了很可能。

apirequest函数

 private void RequestDataFromApi() {

        DotaAPIEndpoints textApiService= API_Client.getClient().create(DotaAPIEndpoints.class);
        Call<List<Heroes>> call2 =textApiService.getHeroes();
        call2.enqueue(new Callback<List<Heroes>>() {
            @Override
            public void onResponse(Call<List<Heroes>> call, Response<List<Heroes>> response) {
                hero_list.clear();
                hero_list.addAll(response.body());

            }

            @Override
            public void onFailure(Call<List<Heroes>> call, Throwable t) {
                Toast.makeText(MainActivity.this, "hero_list call failed!", Toast.LENGTH_SHORT).show();
            }
        });
        requestLatch.countDown();
    }
setText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    requestLatch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                textt.setText(hero_list.get(0).getHeroImg());

            }
        });
setText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    requestLatch.await();

您不能在UI线程上调用await 在上面的代码中,此时调用await就是告诉UI线程等待-如果UI线程正在等待,它将无法绘制屏幕更新,因此系统将崩溃,并显示“ Activity Not Responding”错误。


也许有帮助,这是一种安全地允许单击按钮并且如果尚未加载数据也不会崩溃的方法。 (完全不需要CountdownLatch

        setText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(hero_list.isEmpty()) {
                    Toast.makeText(MainActivity.this, "List not ready", Toast.LENGTH_SHORT).show();
                    return;
                }
                textt.setText(hero_list.get(0).getHeroImg());
            }
        });

暂无
暂无

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

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