質問: br.readLine() ) ) { pw.write(line_buffer + "\r\n"); } // 閉じる br.close(); // BufferedReader isr.close(); // InputStreamReader http.disconnect(); // HttpURLConnection pw.close(); // BufferedWriter } catch( Exception e ) { System.out.println( e.getMessage() ); } } ``` 尚、HTTP通信は 「Android 9 (API level 28) からはHTTP通信がデフォルトで無効になっている」 との事ですのでその対応策を以下の様にしています。 ###### manifest.xml ``` android:usesCleartextTraffic="true" ・ ・ ・ ``` #### ■2021/06/30 追記 本現象は実機によるデバッグモードで発生していました。 なので、エミュレータではどうか?と思いやってみたところ同じ現象。 だが、エミュレータ内のブラウザで接続するとうまくいく。。。。 という事はWebサーバ環境が原因でない? とりあえず0.1歩ぐらいは進んだかな・・・・ #### ■2021/06/30 追記その2 えー... 上記ソース内の内容を若干修正しました。 公開しないほうが良さげなものや調べて追記したのに 記載をしていないものがあり、 少し文字の大きさを変化させて見やすくした・・・・つもりです。
回答: **自己解決!**☆彡 ##### HTTPの接続はActivityから直接はダメという事がわかりました。 参考の元になったページは以下です。 ###### Hatena Blogの 711fumiさん が寄稿されている記事を参考にしました。 【Android】メインスレッド(要は画面処理)でhttpリクエスト投げようとしたら怒られた。 〜NetworkOnMainThreadException〜 要約すると ###### 1.HTTP接続するクラスを別途作成 ###### 2.その別途作成したクラスをActivityから呼び出す ※言葉について・・・ 私は初心者なので言葉を専門的に記載しません。(いや・・・できません) 専門的な言葉は上記 711fumiさん の記事に記載されています。 この二つで正常に接続できているようです。 詳しくテストしていくと他にもいろいろ設定が必要な項目や動作不順等 出てくる可能性ありますが、 以下コードでサーバにあるファイルの内容が取得できているので とりあえずこの質問案件については自己解決です。 ##### 上記「1.HTTP接続するクラスを別途作成」で私が作成したクラス ``` package jp.upk.check_sipping; import android.app.Activity; import android.net.Uri; import android.os.AsyncTask; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.SocketTimeoutException; import java.net.URL; public class AsyncHttpRequest extends AsyncTask { private Activity mainActivity; public AsyncHttpRequest(Activity activity) { this.mainActivity = activity;// 呼び出し元のアクティビティ } @Override protected String doInBackground(Uri.Builder... builder) { try { URL url = new URL("http://vm-main/systems-test/MainMenu/index.html"); HttpURLConnection coon = (HttpURLConnection) url.openConnection(); coon.setRequestMethod("POST"); coon.setRequestMethod("GET");// HTTPメソッド coon.setUseCaches(false);// キャッシュ利用 coon.setDoOutput(false);// リクエストのボディの送信を許可(GETのときはfalse,POSTのときはtrueにする) coon.setDoInput(true);// レスポンスのボディの受信を許可 coon.connect(); InputStreamReader isr = new InputStreamReader(coon.getInputStream(), "utf8"); // UTF-8 でリーダーを作成 BufferedReader br = new BufferedReader(isr); // 行単位で読み込む為の準備 String line_buffer; while ( null != (line_buffer = br.readLine() ) ) { // BufferedReader は、readLine が null を返すと読み込み終了 System.out.println(line_buffer); } coon.disconnect(); } catch (SocketTimeoutException e1) { // タイムアウト } catch (Exception e2) { // エラー処理 System.out.println( e2.getMessage() ); e2.printStackTrace(); } return ""; } } ``` ###### 上記「2.別途作成したクラスをActivityから呼び出す」呼び出している箇所 ``` ・ ・ ・ @Override public void onClick(View v) { // httpリクエストを入れる変数 Uri.Builder builder = new Uri.Builder(); AsyncHttpRequest task = new AsyncHttpRequest(.this); task.execute(builder); ・ ・ ・ ```