gpt4 book ai didi

java - android等待服务器响应

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:54 26 4
gpt4 key购买 nike

假设我想从服务器执行一个 Http 请求,这个过程需要时间。

现在正因为如此,http 请求需要在不同的线程(AsyncTask、Runnable 等)上运行

但有时我只需要在请求时得到响应,以便更新 UI

在循环中使用 Thread.sleep 来等待响应在性能方面不是很好

例子:我想要用户名,我向服务器要它,我必须等待它现在 Activity 调用 UserManager,UserManager 调用执行操作的 serverHandler 并返回结果

也许事件系统是有序的,但我不确定如何在我的场景中执行此操作坦率地说,我对这个问题真的很困惑

请帮助某人?

最佳答案

这绝对可以通过 AsyncTask 完成...在 doInBackground() 中处理网络请求,一旦 doInBackground() 完成,onPostExecute( ) 在 UI 线程上触发,您可以在其中执行任何将更新 UI 元素的代码。

如果您需要更通用和可重用的东西,您可能想要实现回调...我将 UI 线程称为客户端,将 AsyncTask 称为服务器

  1. 创建一个新接口(interface)并创建一些方法 stub 。

    public interface MyEventListener {
    public void onEventCompleted();
    public void onEventFailed();
    }
  2. 让您的客户端将 MyEventListener 的实例传递给服务器。这样做的典型方法是让您的客户端实现接口(interface) (MyEventListener) 并将其自身传递给服务器。

    public class MyActivity implement MyEventListener {

    public void startEvent() {
    new MyAsyncTask(this).execute();
    }

    @Override
    public void onEventCompleted() {
    // TODO
    }

    @Override
    public void onEventFailed() {
    // TODO
    }
    }
  3. 在服务器的onPostExecute上,检查回调是否为空并调用相应的方法。

    public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
    private MyEventListener callback;

    public MyAsyncTask(MyEventListener cb) {
    callback = cb;
    }

    [...]

    @Override
    protected void onPostExecute(Void aVoid) {
    if(callback != null) {
    callback.onEventCompleted();
    }
    }
    }

您可以在此处阅读有关回调的更多信息:http://www.javaworld.com/javaworld/javatips/jw-javatip10.html

关于java - android等待服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com