我正在努力将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
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来完成此任务时,我都不明白他们如何获取数据,因为应用程序应该立即执行的唯一事情是打开该文章 - 它需要等待请求完成,对?这是一个我应该压制的错误,只是在它完成之前放置一个加载屏幕?任何建议都将不胜感激。
感谢。