【问题标题】:Passing html from an AsyncTask object back to the calling Activity将 html 从 AsyncTask 对象传回调用 Activity
【发布时间】:2011-06-09 01:07:50
【问题描述】:

我有一个活动对象,myAct。 myAct 创建并调用我的扩展 AsyncTask 的 httpGetter 对象

httpGetter 做得很好!我的进度条效果很好。它获取 HTML 数据。我在 httpGetter.onPostExecute 中放了一个祝酒词..... HTML !!!!

如何将数据从 onPostExecute 传递回活动?我什至不知道该用谷歌搜索什么。我尝试了一些东西,我看到的所有示例要么更新了 textView,要么只是在 onPostExecute 中以 toast 的形式显示数据。我想在调用活动中恢复事情。在我的 httpGetter 类中,我创建了一个方法来设置调用 Activity 的句柄,我认为我可以使用结果字符串调用方法。没有运气。

【问题讨论】:

    标签: android android-activity android-asynctask


    【解决方案1】:

    好的,所以更多的谷歌搜索想出了以下解决方案。

    myAct 需要一个接口

       public interface WebServiceListener 
    {
        public void onHTTPGetComplete (ArrayList<String> arrayList);
    }
    public void onHTTPGetComplete  (ArrayList<String> arrayList) {
          String Response = arrayList.get(0);
          Toast worked = Toast.makeText(mainPage.this, Response, Toast.LENGTH_LONG);
          worked.show();
    }
    

    并且需要调用 onPostExecute 中的 Async

    listener.onHTTPGetComplete(myList);

    【讨论】:

      【解决方案2】:

      如何使用 intent.putExtra() 从 httpGetter 向 myAct 发送一个意图以传回您的数据?为此,您需要在创建 AsyncTask 时让 httpGetter 知道 myAct 的上下文。

      【讨论】:

      • 我也考虑过这个解决方案,但担心第一次广播意图和监听它的开销。
      【解决方案3】:

      从你的 AsyncTask 传回一个包含 HTML 的包。示例:

      @Override
      protected Bundle doInBackground(String... params) {
      
          Bundle b = new Bundle();
      
          HttpGet get = new HttpGet("myurl");
      
          HttpResponse response = HttpManager.execute(get);
          HttpEntity entity = response.getEntity();
          String raw_result = EntityUtils.toString(entity);
          entity.consumeContent();
      
          b.putString(IService.RESULT, raw_result);
          b.putInt(IService.STATUS, IService.STATUS_FINISHED);
      
          return b;
      
      }
      
      
      // override this in your activity as an anon inner class
      @Override
      protected void onPostExecute(Bundle b) {
          int resultCode = b.getInt(IService.STATUS);
      }
      

      【讨论】:

        【解决方案4】:

        我这样做的方法是向我的 HttpAsyncTask 添加一个抽象的消费者方法,我会将服务器从 onPostExecute 返回的数据传递给该方法。现在调用它的活动需要实现消费者方法,让活动访问数据:-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-29
          • 2013-10-22
          • 1970-01-01
          • 2020-05-01
          • 2020-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多