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

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

ただいまの
回答率

90.00%

Activityの中で、DBからの値を取りたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 610

SmartBuzz

score 79

スレッド間通信について教えて下さい。

ActivityのonCreateの中でMainFragmentPagerAdapterを呼び出す前に、DBからデータをリスト形式で取ってきて、Activityのグローバル変数に格納したいのですが、うまくいきません。

やりたい事は、タブの名前をDBに格納された「tab」テーブルを一覧取得して、「title」列を全件タブのタイトルに登録したいというものです。

@Override
    protected void onCreate(Bundle saveInstanceState){

        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_collection_list);

        tabList = new ArrayList<>();

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        try{
        getTabInfo(this);
        Thread.sleep(1000);
        }catch (Exception e){

        }

        mPagerAdapter = new MainFragmentPagerAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager)findViewById(R.id.container);
        mViewPager.setAdapter(mPagerAdapter);

        TabLayout tabLayout = (TabLayout)findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
    }

現状は、クリエイトの中で、MainFragmentPagerAdapterでタブを生成する前に、スリープをさせて、getTabInfo(this)

private void getTabInfo(final Activity activity){
        new Thread(new Runnable() {
            @Override
            public void run() {
                final List<Tab> tabList = ((DataCollecotor) getApplication()).getDataCollecotorDatabase().getTabList();

                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        titleTest = tabList.get(0).getTitle();
                    }
                });
            }
        }).start();
    }
final List<Tab> tabList = ((DataCollecotor) getApplication()).getDataCollecotorDatabase().getTabList();

この部分でtabListには入って欲しいと思って書いています。

titleTest = tabList.get(0).getTitle();

この部分は試験的に書きましたがうまくいきませんでした。

どうやればDBから値を取ってActivityの中で使えるようになるのか、ご教授下さい。
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

DataCollecotorがどんなクラスかはわかりませんが、非同期処理で行う理由はなんでしょうか。
そんなにたくさんのデータを処理するつもりですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/24 16:22

    ないことはないです。
    UIスレッドで大量のデータにアクセスするときはUIスレッドの進行をブロックしないように非同期処理で書きます。今回は画面開始時にタブは必ず必要なのでUIスレッドでデータを取得した方がいいと思いますよ。

    でも、理解せずに真似するのは危険ですね。

    キャンセル

  • 2016/10/24 16:27 編集

    大量のデータを取得する時はスレッドを分ける。
    少量のデータを取得する時はスレッドを分け無くていい。

    スレッドを分ける意味は、処理を邪魔しないように…という事なんですね!
    ありがとうございます!


    コードもろくにかけず会社で突然Android開発を言われ、期限だけが迫ってきて誰も教えてくれない状況下で、リファレンスも読めないままでとにかく理解よりもなんとか作らないと…と付け焼刃でこの様なコピペしまくり状態でつまづいて、いろんな方のブログを読んでも理解できないといつも、teratailに書き込んでいます…。

    いつも素早い回答本当に大変助かります。ありがとうございます!

    キャンセル

  • 2016/10/24 16:35

    本当はできるだけ非同期にしたいけど、非同期処理の管理が複雑化するのでその辺はバランスをとらないといけないですね。

    なるほど、困った状況ですね。
    「こうゆう理解、認識をしている」といった事柄も質問に書いてもいいかもしれないですね。

    キャンセル

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

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる