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