現在、AsynkTask内でAPIをたたき、その結果を取得するというプログラムを書いております。
ただし、APIから受け取った結果が望ましいものではなかった場合(以下の例ではcount項目が0)、
doInBackground内でwhile文を用いることで、望ましい結果が出るまでループさせようという意図のもと、
以下のように実装いたしました。
結果として、count : 0 のような結果が(例として)得られた場合、ループがまわることは確認しました。
しかし、処理が終わらなかったためデバッグしたところ、
ループ中にcount: 200のような結果が得られた場合でも、下記のcountが0のままとなり、while文を抜けられなくなっているようです。
countに新しく値が代入され、while文を抜けるものと思っていたのですが、どうしてこのようになってしまうのでしょうか。
考え方、理由などご存じの方いらっしゃいましたらお教え願います。
(以下では、本質問と関係のないと思われる一部のコードを***で伏せてあります)
Java
1static class MyAsynk extends AsyncTask<String, Void, String> { 2 int count = 0; 3 4 (中略) 5 //ボタンを押した時に非同期処理を開始します 6 @Override 7 protected String doInBackground(String... params) { 8 final StringBuilder result = new StringBuilder(); 9 while (count == 0) { 10 11 Uri.Builder uriBuilder = new Uri.Builder(); //Uri.Builderで要素を入力 12 uriBuilder.scheme("https"); 13 uriBuilder.authority(***); //ホスト 14 uriBuilder.path("***"); 15 uriBuilder.appendQueryParameter("format", "json"). 16 appendQueryParameter("***", ***). 17 appendQueryParameter("page", String.valueOf(***)). 18 appendQueryParameter("applicationId", "***"); 19 20 final String uriStr = uriBuilder.build().toString(); //URIを作成して文字列に 21 Log.d("url", uriStr); 22 try { 23 URL url = new URL(uriStr); //文字列からURLに変換 24 HttpURLConnection con = null; //HTTP接続の設定を入力していく 25 con = (HttpURLConnection) url.openConnection(); 26 con.setRequestMethod("GET"); 27 con.setDoInput(true); //? 28 con.connect(); //HTTP接続 29 30 final InputStream in = con.getInputStream(); //情報を受け取り表示するための形式に 31 final InputStreamReader inReader = new InputStreamReader(in); 32 final BufferedReader bufReader = new BufferedReader(inReader); 33 34 String line = null; 35 while ((line = bufReader.readLine()) != null) { 36 result.append(line); 37 } 38 bufReader.close(); 39 inReader.close(); 40 in.close(); 41 42 JSONObject json = new JSONObject(result.toString()); 43 count = Integer.parseInt(json.optString("count")); 44 45 } catch (Exception e) { //エラーの時に呼び出される 46 Log.e("ERROR", e.toString()); 47 } 48 } 49 return result.toString(); //onPostExecuteへ 50 }
回答1件
あなたの回答
tips
プレビュー