将App Indexing与Async服务器调用集成

时间:2014-07-28 19:38:13

标签: android android-asynctask android-app-indexing

我正在努力将Google应用程序索引集成到我的Android应用程序中,该应用程序将获取URL,查询服务器以获取文章的内部ID,然后打开该文章。我对如何实现这一点感到有些困惑,因为我没有那么多的网络通话经验。

  private void openAppIndexedArticle(String data) {
    HomeActivity home = getActivity();
    MyFragment currentFragment = home.getCurrentFragment();
    MyHandler handler = MyHandler.getInstance(mActivity.get());
    String articleUrn = handler.getArticleUrnFromUrl(data);
    ReadingFragment readingFragment = ReadingFragment.createInstance(articleUrn);
    home.openFragment(readingFragment);
  }

我需要在MyHandler

中获取ID
public String getArticleUrnFromUrl(String url) {
  HttpResponse response = performGET(storyUrl);
  if (response != null) {
    if (response.getStatusLine().getStatusCode() == 200) {
      GzipResponse gzip = new GzipResponse(response);
      InputStream is = gzip.getContent();
      try {
        String json = IOUtils.toString(is);
        JSONObject object = new JSONObject(json);
        String id = object.optString("articleId");
        gzip.close();
        return new Urn(id, LiEntityType.ARTICLE).toString();
      } catch (IOException e) {
        e.printStackTrace();
      } catch (JSONException e) {
        e.printStackTrace();
      }
    }
  }
  return null;
}

现在,当我尝试这个时,它给了我一个NetworkOnMainThreadException这是可以理解的,因为它在主线程上。每当我查找AsyncTasks来完成此任务时,我都不明白他们如何获取数据,因为应用程序应该立即执行的唯一事情是打开该文章 - 它需要等待请求完成,对?这是一个我应该压制的错误,只是在它完成之前放置一个加载屏幕?任何建议都将不胜感激。

感谢。

0 个答案:

没有答案