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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

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

Android

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Android Studio

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

Q&A

解決済

1回答

1116閲覧

http.connectでエラー表示

indy_papa

総合スコア24

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

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

Android

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Android Studio

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

0グッド

0クリップ

投稿2021/06/29 06:32

編集2021/06/30 06:22

Android Studio(java)でアプリ開発中です。
アプリ開発は全くの初めてではないのですが、ほぼそれに近い状態です。
ネットや書籍を購入していろいろ勉強しながらの開発をしています。
宜しくお願いします。

###開発環境
---Android Studio Ver4.2.1 for Windows 64-bit
---Gradle Version 6.7.1
---API 30

###やりたい事
社内Webサーバに接続し、アプリ側で使用する出荷予定データをファイルで取得したいと
考えています。

###困り事の詳細内容
ネットでHTTPプロトコルによるサンプルコードを調査して
以下のコードになりましたが、
http.connect();
を実行すると
「Debug Console」に
/********************************************************
I/System.out: null
I/Choreographer: Skipped 741 frames! The application may be doing too much work on its main thread.
W/View: couldn't find view with id 2131231119
/********************************************************
と表示され、エラーで終わります。
"I/System.out: null"がキーワードと思ってネットでいろいろと調べましたが
いろいろな勉強不足が重なっているようで、
どのように解決すればいいのかさっぱりの状態です。
ご助力いただけると助かります。

######あるActivity内のコード

java

1 public void onClick(View v) { 2 // 書き込みファイル名 3 String filename = "index.html"; 4 File filFolder = getFilesDir(); 5 if(filFolder.exists()){ 6 filFolder.mkdir(); 7 } 8 File file = new File(getFilesDir(), filename); 9 try { 10 FileWriter fw = new FileWriter(file, false); 11 PrintWriter pw = new PrintWriter(new BufferedWriter(fw)); 12 // URL文字列 13 String str = "http://vm-main/systems-test/MainMenu/index.html"; 14 // ターゲット 15 URL url = new URL( str ); 16 // 接続オブジェクト 17 HttpURLConnection http = (HttpURLConnection)url.openConnection(); 18 // GET メソッド 19 http.setRequestMethod("GET"); 20 // 接続 <<<===ここでエラー発生 21 http.connect(); 22 // UTF-8 でリーダーを作成 23 InputStreamReader isr = new InputStreamReader(http.getInputStream(), "utf8"); 24 // 行単位で読み込む為の準備 25 BufferedReader br = new BufferedReader(isr); 26 String line_buffer; 27 // BufferedReader は、readLine が null を返すと読み込み終了 28 while ( null != (line_buffer = br.readLine() ) ) { 29 pw.write(line_buffer + "\r\n"); 30 } 31 32 // 閉じる 33 br.close(); // BufferedReader 34 isr.close(); // InputStreamReader 35 http.disconnect(); // HttpURLConnection 36 pw.close(); // BufferedWriter 37 38 } 39 catch( Exception e ) { 40 System.out.println( e.getMessage() ); 41 } 42 }

尚、HTTP通信は
「Android 9 (API level 28) からはHTTP通信がデフォルトで無効になっている」
との事ですのでその対応策を以下の様にしています。

######manifest.xml

xml

1<manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 package="jp.xxx.check_desuyo"> 3 <!-- 以下の uses-permission を追記 --> 4 <uses-permission android:name="android.permission.INTERNET"/> 5 <application 6 7 8 9 <!-- 以下の usesCleartextTraffic を追記 --> 10 android:usesCleartextTraffic="true" 11121314 </application> 15</manifest>

####■2021/06/30 追記
本現象は実機によるデバッグモードで発生していました。
なので、エミュレータではどうか?と思いやってみたところ同じ現象。
だが、エミュレータ内のブラウザで接続するとうまくいく。。。。
という事はWebサーバ環境が原因でない?

とりあえず0.1歩ぐらいは進んだかな・・・・

####■2021/06/30 追記その2
えー...
上記ソース内の内容を若干修正しました。
公開しないほうが良さげなものや調べて追記したのに
記載をしていないものがあり、
少し文字の大きさを変化させて見やすくした・・・・つもりです。

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

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

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

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

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

guest

回答1

0

自己解決

##**自己解決!**☆彡
#####HTTPの接続はActivityから直接はダメという事がわかりました。

参考の元になったページは以下です。
######Hatena Blogの 711fumiさん が寄稿されている記事を参考にしました。
【Android】メインスレッド(要は画面処理)でhttpリクエスト投げようとしたら怒られた。 〜NetworkOnMainThreadException〜

要約すると
######1.HTTP接続するクラスを別途作成
######2.その別途作成したクラスをActivityから呼び出す
※言葉について・・・
私は初心者なので言葉を専門的に記載しません。(いや・・・できません)
専門的な言葉は上記 711fumiさん の記事に記載されています。

この二つで正常に接続できているようです。
詳しくテストしていくと他にもいろいろ設定が必要な項目や動作不順等
出てくる可能性ありますが、
以下コードでサーバにあるファイルの内容が取得できているので
とりあえずこの質問案件については自己解決です。

#####上記「1.HTTP接続するクラスを別途作成」で私が作成したクラス

java

1package jp.upk.check_sipping; 2 3import android.app.Activity; 4import android.net.Uri; 5import android.os.AsyncTask; 6 7import java.io.BufferedReader; 8import java.io.InputStreamReader; 9import java.net.HttpURLConnection; 10import java.net.SocketTimeoutException; 11import java.net.URL; 12 13public class AsyncHttpRequest extends AsyncTask<Uri.Builder, Void, String> { 14 15 private Activity mainActivity; 16 public AsyncHttpRequest(Activity activity) { 17 this.mainActivity = activity;// 呼び出し元のアクティビティ 18 } 19 20 @Override 21 protected String doInBackground(Uri.Builder... builder) { 22 try { 23 URL url = new URL("http://vm-main/systems-test/MainMenu/index.html"); 24 HttpURLConnection coon = (HttpURLConnection) url.openConnection(); 25 coon.setRequestMethod("POST"); 26 coon.setRequestMethod("GET");// HTTPメソッド 27 coon.setUseCaches(false);// キャッシュ利用 28 coon.setDoOutput(false);// リクエストのボディの送信を許可(GETのときはfalse,POSTのときはtrueにする) 29 coon.setDoInput(true);// レスポンスのボディの受信を許可 30 coon.connect(); 31 32 InputStreamReader isr = new InputStreamReader(coon.getInputStream(), "utf8"); // UTF-8 でリーダーを作成 33 BufferedReader br = new BufferedReader(isr); // 行単位で読み込む為の準備 34 String line_buffer; 35 while ( null != (line_buffer = br.readLine() ) ) { // BufferedReader は、readLine が null を返すと読み込み終了 36 System.out.println(line_buffer); 37 } 38 coon.disconnect(); 39 } catch (SocketTimeoutException e1) { 40 // タイムアウト 41 } catch (Exception e2) { 42 // エラー処理 43 System.out.println( e2.getMessage() ); 44 e2.printStackTrace(); 45 } 46 return ""; 47 } 48} 49

######上記「2.別途作成したクラスをActivityから呼び出す」呼び出している箇所

Java

1234 @Override 5 public void onClick(View v) { 6 7 // httpリクエストを入れる変数 8 Uri.Builder builder = new Uri.Builder(); 9 AsyncHttpRequest task = new AsyncHttpRequest(<Activity>.this); 10 task.execute(builder); 111213

投稿2021/06/30 06:27

indy_papa

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問