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

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

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

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

Android

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

Android Studio

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

Q&A

1回答

2974閲覧

AndroidStudioでhttpURLConnectionのConnect()メソッドで例外処理になってしまう

urncus

総合スコア8

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2020/04/22 03:45

いつもありがとうございます。
このプログラムをAndroidStudioで実行すると例外処理になってしまいます。
connect()メソッドから例外処理になってしまいます。
このサンプルプログラムはもともとボタンを押されるとhttpURLConnectionで接続されるプログラムなのですが、
起動時にhttpURLConnectionで値を持ってきたいです。
例外処理の原因を教えて頂けませんでしょうか。
よろしくお願いいたします。

java

1package com.websarva.wings.android.asyncsample; 2 3import android.annotation.SuppressLint; 4import android.os.AsyncTask; 5import android.support.v7.app.AppCompatActivity; 6import android.os.Bundle; 7import android.view.View; 8import android.widget.AdapterView; 9import android.widget.ListView; 10import android.widget.SimpleAdapter; 11import android.widget.TextView; 12 13import org.json.JSONArray; 14import org.json.JSONException; 15import org.json.JSONObject; 16 17import java.io.BufferedReader; 18import java.io.IOException; 19import java.io.InputStream; 20import java.io.InputStreamReader; 21import java.net.HttpURLConnection; 22import java.net.MalformedURLException; 23import java.net.URL; 24import java.util.ArrayList; 25import java.util.HashMap; 26import java.util.List; 27import java.util.Map; 28 29public class WeatherInfoActivity extends AppCompatActivity { 30 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_weather_info); 35 36 37 //画面部品ListViewを取得 38 ListView lvCityList = findViewById(R.id.lvCityList); 39 //SimpleAdapterで使用するListオブジェクトを用意。 40 List<Map<String, String>> cityList = new ArrayList<>(); 41 //都市データを格納するMapオブジェクトの用意とcityListへのデータ登録。 42 Map<String, String> city = new HashMap<>(); 43 //PlaceGetter place = new PlaceGetter(); 44 45 http h = new http(); 46 URL url = null; 47 String s = null; 48 49 try { 50 url = new URL("https://www.yahoo.co.jp/"); 51 s = h.doInBackground(url); 52 } catch (MalformedURLException e) { 53 e.printStackTrace(); 54 } 55 city.put("name", s); 56 city.put("id", "270000"); 57 cityList.add(city); 58 city = new HashMap<>(); 59 city.put("name", "神戸"); 60 city.put("id", "280010"); 61 cityList.add(city); 62 city = new HashMap<>(); 63 city.put("name", "豊岡"); 64 city.put("id", "280020"); 65 cityList.add(city); 66 city = new HashMap<>(); 67 city.put("name", "京都"); 68 city.put("id", "260010"); 69 cityList.add(city); 70 city = new HashMap<>(); 71 city.put("name", "舞鶴"); 72 city.put("id", "260020"); 73 cityList.add(city); 74 city = new HashMap<>(); 75 city.put("name", "奈良"); 76 city.put("id", "290010"); 77 cityList.add(city); 78 city = new HashMap<>(); 79 city.put("name", "風屋"); 80 city.put("id", "290020"); 81 cityList.add(city); 82 city = new HashMap<>(); 83 city.put("name", "和歌山"); 84 city.put("id", "300010"); 85 cityList.add(city); 86 city = new HashMap<>(); 87 city.put("name", "潮岬"); 88 city.put("id", "300020"); 89 cityList.add(city); 90 //SimpleAdapterで使用するfrom-to用変数の用意。 91 String[] from = {"name"}; 92 int[] to = {android.R.id.text1}; 93 //SimpleAdapterを生成。 94 SimpleAdapter adapter = new SimpleAdapter(WeatherInfoActivity.this, cityList, android.R.layout.simple_expandable_list_item_1, from, to); 95 //ListViewにSimpleAdapterを設定。 96 lvCityList.setAdapter(adapter); 97 //ListViewにリスナを設定。 98 lvCityList.setOnItemClickListener(new ListItemClickListener()); 99 } 100

java

1package com.websarva.wings.android.asyncsample; 2import android.os.AsyncTask; 3 4import java.io.BufferedReader; 5import java.io.IOException; 6import java.io.InputStream; 7import java.io.InputStreamReader; 8import java.net.HttpURLConnection; 9import java.net.MalformedURLException; 10import java.net.ProtocolException; 11import java.net.URL; 12 13public final class http extends AsyncTask<URL, Void, String> { 14 15 @Override 16 protected String doInBackground(URL... urls) { 17 // 取得したテキストを格納する変数 18 final StringBuilder result = new StringBuilder(); 19 // アクセス先URL 20 final URL url = urls[0]; 21 22 HttpURLConnection con = null; 23 try { 24 // ローカル処理 25 // コネクション取得 26 con = (HttpURLConnection) url.openConnection(); 27 con.setConnectTimeout(10000); 28 con.connect(); 29 30 // HTTPレスポンスコード 31 final int status = con.getResponseCode(); 32 if (status == HttpURLConnection.HTTP_OK) { 33 // 通信に成功した 34 // テキストを取得する 35 final InputStream in = con.getInputStream(); 36 final String encoding = con.getContentEncoding(); 37 final InputStreamReader inReader = new InputStreamReader(in, encoding); 38 final BufferedReader bufReader = new BufferedReader(inReader); 39 String line = null; 40 // 1行ずつテキストを読み込む 41 while((line = bufReader.readLine()) != null) { 42 result.append(line); 43 } 44 bufReader.close(); 45 inReader.close(); 46 in.close(); 47 } 48 49 } catch (MalformedURLException e1) { 50 e1.printStackTrace(); 51 } catch (ProtocolException e1) { 52 e1.printStackTrace(); 53 } catch (IOException e1) { 54 e1.printStackTrace(); 55 } finally { 56 if (con != null) { 57 // コネクションを切断 58 con.disconnect(); 59 } 60 } 61 return result.toString(); 62 } 63}

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

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

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

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

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

hoshi-takanori

2020/04/22 08:14

AsyncTask の使い方が間違ってます。doInBackground を直接呼んではいけません。h.execute() すると別のスレッドで doInBackground が実行され、それが終了するとメインスレッドで onPostExecute が呼ばれます。 Android ではメインスレッドでは通信は行えませんし、メインスレッドでないと GUI をいじれないので、doInBackground で通信した結果を onPostExecute で受け取って GUI を更新する必要があります。 あと、http というクラス名はどうかと思います。クラス名の最初の文字は大文字にすべきですし、Http だけだと何のことかよく分からないので、せめて HttpTask とかにすることをお勧めします。
keicha_hrs

2020/04/22 09:06

AsyncTaskは次期APIレベルで非推奨になるので、今のうちに別の方法を検討した方がいいのではないかと思います。(ベストは開発言語をKotlinに変えてCoroutineを用いることだろうが)
urncus

2020/04/24 00:47

hoshi-takanori様 ありがとうございます。解決しました!
guest

回答1

0

エラー内容が不明ですが、以下の点をご確認出来ますでしょうか。

1、AndroidManifest.xmlファイルに、インターネットアクセスのパーミッションを記載している?

// 以下を記載済みかどうか <uses-permission android:name="android.permission.INTERNET" />

2、AsyncTaskの実行方法が違うのでは?

// 誤 s = h.doInBackground(url); // 正 s = h.execute(url);

AsyncTaskのドキュメント

投稿2020/04/22 15:06

tsuki01

総合スコア1751

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問