0

我正在将 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);
  }

这是我需要获取ID的地方MyHandler

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 以完成此操作时,我不明白它们是如何取回数据的,因为该应用程序现在唯一应该做的就是打开那篇文章 - 它无论如何都需要等待请求完成,对吧?这是一个我应该抑制的错误,只是在它完成之前放置一个加载屏幕?任何建议将不胜感激。

谢谢。

4

0 回答 0