質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

4842閲覧

非同期通信で結果を待つ方法(?)

rvsezuki

総合スコア66

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/02/07 08:32

タブが3つあり、それぞれに適した内容をセットする方法をviewpagerで書きました。

メインのJavaが

public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return MyFragment.newInstance(position + 1); } @Override public int getCount() { return 3; } @Override public CharSequence getPageTitle(int position) { return null; } } public static class MyFragment extends Fragment { private boolean mIsRequesting = false; private static final String ARG_SECTION_NUMBER = "section_number"; public MyFragment() { } public static MyFragment newInstance(int page) { MyFragment fragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putInt("PAGE", page); fragment.setArguments(bundle); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup viewpager, Bundle savedInstanceState) { int page = getArguments().getInt("PAGE", 1); ListView listView = (ListView) inflater.inflate(R.layout.fragment_main, viewpager, false); int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER); ((appl) getActivity()).getNew(sectionNumber, true, true); NewAdapter sectionAdapter = new NewAdapter(getContext(), R.layout.listrow, appl.newList[sectionNumber]); listView.setAdapter(sectionAdapter); //ここで確認作業 loadItems(); return listView; } } private void loadItems() { この中に非同期通信完了サインを受け取るものを書く(?) }

非同期通信が

// メインスレッドで実行する処理 //バックグラウンドで行いたい処理の事前準備 @Override protected void onPostExecute(final ArrayList<NewClass> listTemp) { if (listTemp == null) { try { //進歩を伝える //ここは型引数で指定した型(void型)の可変長引数 //これが呼ばれると this.mainAct.StopProgress(0); } catch (final Exception e) { } if (this.mainAct != null) { this.mainAct.NewRefreshCallback(this.ID, null); } return; } if (appl.newList[this.ID] != null && appl.newList[this.ID].get(0).GetID().equals( listTemp.get(0).GetID())) { // 更新したが同じ場合 this.mainAct.NewRefreshCallback(this.ID, null); } else { // 更新時 // メイン画面へ戻す appl.newList[this.ID] = null; appl.newList[this.ID] = listTemp; this.mainAct.NewRefreshCallback(this.ID, this.RefreshFlg); } }

となっています。
なにやらモジュール結合が強い(?)とかで
loadItemsメソッドに非同期通信が完了した(もしくは3つのリストがセットされた)などの完了通知を書かなければいけないとからしいです。

かなり特殊で難関な状況なようらしいです。
参考にするものもありません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/02/07 09:32

具体的な質問がわかりません。
rvsezuki

2017/02/07 09:51

loadItems()メソッドの中身をどう書けば良いのか?という質問です。
t_obara

2017/02/08 01:47

コードを提示することで、認識誤りなく伝えるための情報として役立ちますが、それを一から読ませるだけでなく、大まかなフローなどを言葉で説明すると良いと思いますよ。これにより、ご自身でも、問題点が何で、何をしなければならないのか整理される場合があります。これこれのような動作で動いいて欲しいため、xxのようなコードを記載しているが、期待した動作をしない、こちらが期待した動作はこれこれという動作です といった感じ。「モジュール結合度が強い?」とか「かなり特殊で難関な状況なようらしい」という表現を見るにつけ、別に自分のことではないのでよくわからないので、わかる人よろしく〜と言っているように見えます。 ちなみに、非同期通信が完了した場合、それをGUI側に伝えるためには、ポーリングを行う場合と、別な方法でスレッド等をまたいで通知する方法を利用するなどが選択肢をしてあります。
guest

回答1

0

ベストアンサー

標準apiのみでやるならCountDownLatchを使ってみてはどうでしょうか?
参考url
個人的にはRxJavaというライブラリを使うことをお勧めします。習得難易度は少し高いですが、複数の非同期処理の待ち合わせ実行スレッドの切り替えなどか簡単にできます。

投稿2017/02/07 12:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問