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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

解決済

オーバライドされた、voidメソッドから戻り値を取りたいです。

s.k
s.k

総合スコア423

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

3回答

0リアクション

1クリップ

2851閲覧

投稿2017/06/02 01:55

編集2017/06/02 03:03

###前提・実現したいこと
フラグメントを使用したいです。
setListAdapterの第三引数にJSONデータを取得するメソッドを起きましたが、
そのメソッドはvoid型で、スコープの関係上戻り値を取得できないことに気がつきました。

※第三引数自体にあるメソッド自体は戻り値があります。そのメソッドの中にvoid型メソッドがあり、そのメソッドはオーバライドされたものです。

###発生している問題・エラーメッセージ

ターミナル

06-02 10:31:19.326 7854-7854/station.around.aroundsatation I/System.out: あ 06-02 10:31:19.326 7854-7854/station.around.aroundsatation I/System.out: [] ★戻り値(スコープで空になってしまう。)★ 06-02 10:31:19.326 7854-7854/station.around.aroundsatation I/System.out: い

###該当のソースコード

Java

public class HttpConnect { public List<String> lists = new ArrayList<String>(); ★① public List<String> showMember(){★②戻り値があるメソッド Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://candii.tk/") .addConverterFactory(GsonConverterFactory.create()) .build(); ImageClient service = retrofit.create(ImageClient.class); Call<List<ListImage>> call2 = service.listImages(); System.out.println(service.listImages()); call2.enqueue(new Callback<List<ListImage>>() { @Override public void onResponse(Call<List<ListImage>> call, Response<List<ListImage>> response) { ★③戻り値がないメソッド List<ListImage> listImage = response.body(); System.out.println(response.body()); int s = listImage.size(); for(int i = 0; i < s; i++){ Log.d("debug3", listImage.get(i).toString()); System.out.println(listImage.get(i).getEn_title()); lists.add(listImage.get(i).getEn_title()); } } @Override public void onFailure(Call<List<ListImage>> call, Throwable t) { Log.d("debug4", t.getMessage()); } }); System.out.println("あ"); System.out.println(lists); ★④空になる。 System.out.println("い"); return lists; } }

Retrofit2を使っています。
③のメソッドを戻り値ありに変更できず、結果①で定義した変数に③で取得した配列を格納できず、
②メソッドの戻り値が空になります。

③から②へ値を渡す方法に関してご助言をいただきたいです!

ちなみにフラグメントはこのような形で行ってます。

Java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //リストフラグメントの生成(2) public static class TitlesFragment extends ListFragment { private int pos = -1; public HttpConnect hc = new HttpConnect(); //アクティビティ生成完了時に呼ばれる(3) @Override public void onActivityCreated(Bundle bundle) { super.onActivityCreated(bundle); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, (List<String>)hc.showMember())); ★★ getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); getListView().setBackgroundColor(Color.LTGRAY); if (isTablet(getActivity())) showDetails(0); } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

よろしくお願いします。

追加

以下の記事のようにonResponseメソッド内でViewに値を設定するのが良いのでしょうか。
ただ、以下のやり方だとフラグメントは使えなさそうな木がするのですが、

Android:Retrofit2.0ではてなAPIとおしゃべりしてみた

それともセッターを作った方がいいんでしょうか。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。