###前提・実現したいこと
フラグメントを使用したいです。
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
1 2public class HttpConnect { 3 4 public List<String> lists = new ArrayList<String>(); ★① 5 6 public List<String> showMember(){★②戻り値があるメソッド 7 Retrofit retrofit = new Retrofit.Builder() 8 .baseUrl("http://candii.tk/") 9 .addConverterFactory(GsonConverterFactory.create()) 10 .build(); 11 ImageClient service = retrofit.create(ImageClient.class); 12 13 14 Call<List<ListImage>> call2 = service.listImages(); 15 System.out.println(service.listImages()); 16 17 call2.enqueue(new Callback<List<ListImage>>() { 18 @Override 19 public void onResponse(Call<List<ListImage>> call, Response<List<ListImage>> response) { ★③戻り値がないメソッド 20 List<ListImage> listImage = response.body(); 21 System.out.println(response.body()); 22 int s = listImage.size(); 23 24 25 for(int i = 0; i < s; i++){ 26 Log.d("debug3", listImage.get(i).toString()); 27 System.out.println(listImage.get(i).getEn_title()); 28 lists.add(listImage.get(i).getEn_title()); 29 } 30 31 } 32 33 @Override 34 public void onFailure(Call<List<ListImage>> call, Throwable t) { 35 Log.d("debug4", t.getMessage()); 36 } 37 }); 38 System.out.println("あ"); 39 System.out.println(lists); ★④空になる。 40 System.out.println("い"); 41 return lists; 42 } 43 44}
Retrofit2を使っています。
③のメソッドを戻り値ありに変更できず、結果①で定義した変数に③で取得した配列を格納できず、
②メソッドの戻り値が空になります。
③から②へ値を渡す方法に関してご助言をいただきたいです!
ちなみにフラグメントはこのような形で行ってます。
Java
1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 //リストフラグメントの生成(2) 3 public static class TitlesFragment extends ListFragment { 4 private int pos = -1; 5 public HttpConnect hc = new HttpConnect(); 6 7 //アクティビティ生成完了時に呼ばれる(3) 8 @Override 9 public void onActivityCreated(Bundle bundle) { 10 super.onActivityCreated(bundle); 11 setListAdapter(new ArrayAdapter<String>(getActivity(), 12 android.R.layout.simple_list_item_activated_1, 13 (List<String>)hc.showMember())); ★★ 14 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 15 getListView().setBackgroundColor(Color.LTGRAY); 16 if (isTablet(getActivity())) showDetails(0); 17 } 18~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
よろしくお願いします。
追加
以下の記事のようにonResponseメソッド内でViewに値を設定するのが良いのでしょうか。
ただ、以下のやり方だとフラグメントは使えなさそうな木がするのですが、
Android:Retrofit2.0ではてなAPIとおしゃべりしてみた
それともセッターを作った方がいいんでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/02 06:59