URLを取得し、記事の内部IDをサーバーに照会してから、その記事を開くAndroidアプリにGoogleアプリのインデックス作成を統合する作業を行っています。ネットワーク呼び出しの経験があまりないので、これを達成する方法について少し混乱しています。
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 を検索するときはいつでも、アプリが現在実行する唯一のことはその記事を開くことであるため、データを取り戻す方法がわかりません-とにかくリクエストが完了するのを待つ必要がありますよね? これはエラーを抑制して、完了するまでロード画面を表示する必要がありますか? どんな提案でも大歓迎です。
ありがとう。