【问题标题】:how to get server data after fragment is created without freezing ui创建片段后如何在不冻结ui的情况下获取服务器数据
【发布时间】:2014-08-03 18:27:36
【问题描述】:

我有两个片段,我有滑入,滑出片段之间的过渡,在我的片段加载后,我尝试从服务器获取数据并将数据加载到数组适配器中,我的问题是,我看到我的片段在转换,我使用 execute 在后台执行我的 asynctask,这是我的代码,DownloadJson 扩展到 AsyncTask

public void onResume() {
    DownloadJson downloadJson = new DownloadJson();
    downloadJson.execute("http://somesite.com");    
}

如何在片段加载后开始获取数据而不在转换之间冻结,谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    只需使用使用 asynctask 插入的线程。 asynctask 仍然在 ui 线程中工作。

    new Thread(new Runnable() {
        @Override
        public void run() {
            //download jason... after that
    
            Handler handler = new Handler(Looper.getMainLooper());
            handler.post(new Runnable() {
                @Override
                public void run() {
                    //you can access to ui here when download is finished...
                });
        }
    }).start();
    

    【讨论】:

    • 如何获取响应并做出反应?
    • @MahdiRafatjah 我写的代码正是你想要的,如果我理解正确的话......
    • 这只是会做一些事情并结束,我应该如何将值返回到主 UI 线程?
    • @MahdiRafatjah public void run() { /*All code run in ui thread */ }, 你可以调用函数,它会在 UI 中运行,当然当你调用函数时,你可以将参数传递给函数...
    【解决方案2】:

    首先,你不能在主 UI 线程上使用任何网络活动,你会得到一个 NetworkException。您可以通过使用新的 Thread(new Runnable() {....}); 来解决这个问题,如下所示:

    DownloadJson downloadJson = new DownloadJson();
    Thread t = new Thread()
    {
        @Override
        public void run() {
            try {
                downloadJson.execute("http://somesite.com");  
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    
    //move on with the code, and get data from Thread.
    t.start();
    

    我将转换为 JSONObject 仅用于演示,您需要设置正确的转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2013-11-05
      • 2012-02-07
      • 2011-12-27
      相关资源
      最近更新 更多