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

安卓开发:如何在API调用加载图片完成后将进度条设置为不可见

解决方案

你当前的实现逻辑存在时序问题:Volley请求仅完成了获取图片直链的步骤,你在这一步结束就隐藏进度条,但此时Glide才刚开始加载真正的图片资源,就会出现进度条消失后图片仍在加载的问题。同时你没有处理请求失败的场景,出错时进度条会一直处于显示状态。

修正后的代码如下:

public class MainActivity extends AppCompatActivity {
private ImageView imageView;

// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView=findViewById(R.id.imageView);
    loadMeme();
}

private void loadMeme(){
    setProgressBarVisibility(true);
    RequestQueue queue = Volley.newRequestQueue(this);
    String url ="https://meme-api.herokuapp.com/gimme";
    // 从指定URL请求JSON响应
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            String imageUrl= null;
            try {
                imageUrl = response.getString("url");
            } catch (JSONException e) {
                e.printStackTrace();
                setProgressBarVisibility(false);
                return;
            }
            // 把进度条隐藏逻辑放到Glide加载完成的回调中
            Glide.with(MainActivity.this)
                    .load(imageUrl)
                    .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            setProgressBarVisibility(false);
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            setProgressBarVisibility(false);
                            return false;
                        }
                    })
                    .into(imageView);

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("ERROR ","接口请求失败");
            setProgressBarVisibility(false);
        }
    });
    queue.add(jsonObjectRequest);
}

核心修改点

  • 进度条隐藏逻辑从Volley请求成功回调移到Glide加载回调,确保图片真正加载完成后才隐藏进度条
  • 新增JSON解析失败、Volley请求失败、Glide加载失败三种异常场景的进度条隐藏逻辑,避免进度条常驻
  • 优化了方法名和变量名,表意更清晰,避免拼写歧义

内容的提问来源于stack exchange,提问作者Haseeb Wajid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:12:03