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

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

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

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

Android

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

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Android Studio

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

Q&A

1回答

4239閲覧

【Java】Retrofitを用い同期的にcallしたい【Android Studio】

Toshiyuki0713

総合スコア6

Java

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

Android

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

同期

複数のディレクトリに存在するファイルを更新した場合に、すべてのファイルにも更新が行われる事、又は、同じ記憶領域に同時にアクセスして内容の整合性が失われてしまう事をを防ぐ制御などを同期と呼びます。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Android Studio

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

0グッド

0クリップ

投稿2018/02/24 08:17

編集2018/02/24 11:11

Retrofitを用いて、非同期ではなく同期的にcallしたいのですがどうすればよろしいでしょうか?

①現在call.enque(非同期)で動いているコード

Java

1User user; 2 user = new User(); 3 4 SharedPreferences lineData = getSharedPreferences("DataSave", Context.MODE_PRIVATE); 5 String level = lineData.getString("user_id", "No Data"); 6 Log.e("SharedUser", level); 7 8 9 user.lineUserId = level; 10 Log.e("StoreOk", user.lineUserId); 11 12 KoredakeView = (ListView) findViewById(R.id.koredakeView); 13 14 15 Retrofit retrofit = new Retrofit.Builder() 16 .baseUrl("https://travossbot.herokuapp.com") 17 .addConverterFactory(GsonConverterFactory.create()) 18 .build(); 19 Koredakeinterface koreservice = retrofit.create(Koredakeinterface.class); 20 21 22 Call<List<KoredakeTaiso>> call = koreservice.getKoredakeTaiso(lineData.getString("user_id", "No Data")); 23 Log.e("service", koreservice.toString()); 24 Log.e("lineData", lineData.toString()); 25 26 //Log.e("getBiposi", service.return); 27 28 29 call.enqueue(new Callback<List<KoredakeTaiso>>() { 30 @Override 31 public void onResponse(Call<List<KoredakeTaiso>> call, Response<List<KoredakeTaiso>> response) { 32 Log.e("onResponse", response.toString()); 33 Log.e("onResponse", call.toString()); 34 35 List<KoredakeTaiso> koredake = response.body(); 36 Log.e("response", koredake.toString()); 37 38 39 ArrayAdapter<String> adapter = new ArrayAdapter<>(Koredake.this, R.layout.biposi_list, R.id.biposiRow_text); 40 //Log.e("ArrayAdapter", adapter.toString()); 41 42 ArrayList<String> dateList = new ArrayList<>(); 43 ArrayList<String> dateList2 = new ArrayList<>(); 44 KoredakeFormated koreF = new KoredakeFormated(); 45 46 47 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 48 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'", Locale.ENGLISH); 49 50 51 Date date = new Date(); 52 53 54 for (KoredakeTaiso k : koredake) { 55 56 try { 57 //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 58 //Log.e("SDF", sdf.toString()); 59 60 //Date date = sdf.parse(k.getExerciseDate().toString()); 61 date = sdf.parse(k.getExerciseDate().toString()); 62 System.out.println(date.toString()); 63 Log.e("Parseできてる??", date.toString()); 64 65 /* 66 Arrays.sort(koredake, new Comparator<KoredakeTaiso>() { 67 public int compare(KoredakeTaiso date1, KoredakeTaiso date2) { 68 return date1.date - date2.getExerciseDate(); 69 } 70 }); 71 */ 72 73 String str = new SimpleDateFormat("yyyy'年'MM'月'dd'日'").format(date); 74 System.out.println("String型 = " + str); 75 Log.e("変更できてるー??", str.toString()); 76 77 78 dateList.add(str); 79 Log.e("KoredakeDateListできてる??", dateList.toString()); 80 81 /* 82 StringBuilder builder = new StringBuilder(); 83 builder.append(str); 84 adapter.add(builder.toString()); 85 */ 86 87 } catch (ParseException e) { 88 e.printStackTrace(); 89 Log.e("ParseExceptionKoredake", e.toString()); 90 } 91 } 92 93 Collections.sort(dateList, Collections.reverseOrder()); 94 Log.e("Collections koredake", dateList.toString()); 95 96 97 for(String s : dateList) { 98 99 try{ 100 date = sdf2.parse(s); 101 System.out.println(date.toString()); 102 Log.e("Parseその2", date.toString()); 103 104 String str2 = new SimpleDateFormat("yyyy'年'MM'月'd'日'").format(date); 105 Log.e("変更その2", str2.toString()); 106 107 //koreF.setKoreFmt(str2); 108 //Log.e("KoredakeF??", koreF.toString()); 109 110 dateList2.add(str2); 111 112 } catch (ParseException e) { 113 e.printStackTrace(); 114 Log.e("ParseExceptionKoredake2", e.toString()); 115 } 116 } 117 118 koreF.setKoreFmt(dateList2); 119 Log.e("KoredakeF??", koreF.toString()); 120 121 122 123 for (String s : dateList2) { 124 String string = s; 125 Log.e("string", string); 126 adapter.add(string); 127 //Log.e("Adapterできてるーーー??", adapter.toString()); 128 } 129 130 131 KoredakeView.setAdapter(adapter); 132 } 133 134 135 @Override 136 public void onFailure(Call<List<KoredakeTaiso>> call, Throwable t) { 137 Log.e("onFailure", call.toString()); 138 Log.e("onFailure", t.toString()); 139 } 140 });

②call.execute(同期)で動かしたいが、読み飛ばされているようです。

Java

1User user; 2 user = new User(); 3 4 SharedPreferences lineData = getSharedPreferences("DataSave", Context.MODE_PRIVATE); 5 String level = lineData.getString("user_id", "No Data"); 6 Log.e("SharedUser", level); 7 8 9 user.lineUserId = level; 10 Log.e("StoreOk", user.lineUserId); 11 12 13 Retrofit retrofit = new Retrofit.Builder() 14 .baseUrl("https://travossbot.herokuapp.com") 15 .addConverterFactory(GsonConverterFactory.create()) 16 .build(); 17 Koredakeinterface koreservice = retrofit.create(Koredakeinterface.class); 18 19 20 Call<List<KoredakeTaiso>> call = koreservice.getKoredakeTaiso(lineData.getString("user_id", "No Data")); 21 Log.e("service", koreservice.toString()); 22 Log.e("lineData", lineData.toString()); 23 24 try { 25 Response<List<KoredakeTaiso>> response = call.execute(); 26 List<KoredakeTaiso> koredake = response.body(); 27 28 ArrayList<String> dateList = new ArrayList<>(); 29 30 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 31 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'", Locale.ENGLISH); 32 33 34 Date date = new Date(); 35 36 37 for (KoredakeTaiso k : koredake) { 38 39 try { 40 date = sdf.parse(k.getExerciseDate().toString()); 41 System.out.println(date.toString()); 42 Log.e("Parseできてる??", date.toString()); 43 44 45 String str = new SimpleDateFormat("yyyy'年'MM'月'dd'日'").format(date); 46 //Log.e("変更できてるー??", str.toString()); 47 48 49 dateList.add(str); 50 //Log.e("KoredakeDateListできてる??", dateList.toString()); 51 52 } catch (ParseException e) { 53 e.printStackTrace(); 54 //Log.e("ParseExceptionKoredake", e.toString()); 55 } 56 } 57 58 Collections.sort(dateList, Collections.reverseOrder()); 59 Log.e("Collections koredake", dateList.toString()); 60 61 62 for(String s : dateList) { 63 64 try{ 65 date = sdf2.parse(s); 66 System.out.println(date.toString()); 67 Log.e("Parseその2", date.toString()); 68 69 String str2 = new SimpleDateFormat("yyyy'年'M'月'd'日'").format(date); 70 //Log.e("変更その2", str2.toString()); 71 72 dateList2.add(str2); 73 Log.e("KoredakeDateList2??", dateList2.toString()); 74 75 76 } catch (ParseException e) { 77 e.printStackTrace(); 78 Log.e("ParseExceptionKoredake2", e.toString()); 79 } 80 } 81 82 //koreF.setKoreFmt(dateList2); 83 //Log.e("KoredakeF??", koreF.toString()); 84 85 86 } catch(Exception e) { 87 88 }

気になる事があれば聞いてください。よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

メインスレッドで目的の処理を実行してしまっていませんか?
Androidでは、メインスレッドでの通信処理を行おうとすると
NetworkOnMainThreadException が発生します。なので、try-catchで例外が捕捉され、以降の処理が実行されなくなっているものと思われます。

解決するには、AsyncTaskなりを使って自分で通信用のスレッドを用意し、その中で call.execute() を呼ぶ必要があります。call.execute()はそのような用途を想定して用意されているメソッドです。

また、質問とは関係ありませんがtry-catchのcatch節の中では捕捉された例外を処理するコードを書きましょう。エラーの内容をログに出力するだけでも、デバッグがしやすくなるはずです。

投稿2018/03/16 11:21

編集2018/03/16 11:23
kakajika

総合スコア3131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問