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

Android中无法通过Callback函数显示Toast的技术问题求助

问题解决:Callback中Log正常但Toast无法显示

问题原因

你的httpPost方法在子线程中执行网络请求,请求完成后直接在子线程里调用了callback.success()。而Android规定所有UI操作(包括显示Toast)必须在主线程中执行,所以Toast无法正常触发。

解决方案

有两种常见的修复方式:

方式1:在Callback中手动切换到主线程

修改按钮点击事件里的Callback实现,用runOnUiThread将Toast操作切换到主线程:

button.setOnClickListener(new View.OnClickListener() {
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onClick(View view) {
        server.httpPost("https://google.com/index.php?username=Peter");
        server.callback = new Server.Callback() {
            @Override
            public void success(String response) {
                Log.d("test", response);
                // 切换到主线程显示Toast
                AddActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(AddActivity.this, response, Toast.LENGTH_SHORT).show();
                    }
                });
            }
        };
    }
});

方式2:在httpPost方法内部统一切换到主线程调用Callback

这种方式更优雅,上层调用无需再处理线程切换:
修改httpPost方法中调用callback.success的部分:

if(responseCode == HttpURLConnection.HTTP_OK){
    InputStream inputStream = connection.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    stringBuilder.setLength(0);
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
    final String response = stringBuilder.toString();
    // 切换到主线程执行Callback
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            callback.success(response);
        }
    });
}

修改后,按钮点击事件里的Callback可以直接写Toast:

server.callback = new Server.Callback() {
    @Override
    public void success(String response) {
        Log.d("test", response);
        Toast.makeText(AddActivity.this, response, Toast.LENGTH_SHORT).show();
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:15:40