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

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

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

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

Java

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

Android

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

Android Studio

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

4303閲覧

Http通信を用いてリクエストを送信したページのXMLかJSONをアンドロイド上に受け取り表示がしたい

ichita

総合スコア7

HTTP

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

Java

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

Android

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

Android Studio

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/05/14 06:29

編集2017/05/14 10:45

########################################################

前提・実現したいこと
Http通信を用いてリクエストを送信したページのXMLかJSONをアンドロイド上に受け取り表示がしたいです
最終的にはボタンを押すとオープンストリートマップにリクエストを送信し地図上のデータを取得することが目的です。

・ボタンを押すとアプリは落ちずエラーはおきませんがnullが返ってくるようになりました。
・UnsupportedEncodingExceptionの部分でThere is more general expection,,in the throwsList alredyがでるようになりました。
・java.io.FileNotFoundException:というエラーが返ってきます

解決するためにどうすればよいか教えて頂ければ幸いです

###エラーメッセージ
W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView

D/NetworkSecurityConfig: No Network Security Config specified, using platform default

java.io.FileNotFoundException: http://api.openstreetmap.org/api/0.6/map?bbox=11.54,48.14,11.543,48.145

at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:250)

at com.example.ichita_miura.httptest6.HttpResponsAsync.doInBackground(HttpResponsAsync.java:56)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)

###コード
MainActivity

package com.example.ichita_miura.httptest6; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Button; public class MainActivity extends AppCompatActivity { private TextView textView; private Button buttonStart, buttonClear; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView =(TextView)findViewById(R.id.text_view); buttonStart = (Button)findViewById(R.id.button_start); buttonStart.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ startAsync(); } }); buttonClear = (Button)findViewById(R.id.button_clear); buttonClear.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ setTextView(String.valueOf(0)); } }); } private void startAsync(){ HttpResponsAsync httpResponsAsync = new HttpResponsAsync(this); httpResponsAsync.execute(); } public void setTextView(String testout){ textView.setText(String.valueOf(testout)); } } コード

AsyncTask

package com.example.ichita_miura.httptest6; import android.os.AsyncTask; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.json.JSONException; import org.json.JSONObject; public class HttpResponsAsync extends AsyncTask<Void, Void, String> { private MainActivity mainActivity; public HttpResponsAsync(MainActivity activity){ mainActivity = activity; } @Override protected void onPreExecute() { super.onPreExecute(); // doInBackground前処理 } @Override protected String doInBackground(Void... params) { HttpURLConnection con = null; URL url = null; String urlst = "https://www.googleapis.com/books/v1/volumes?q=android"; //String urlst ="http://api.openstreetmap.org/api/0.6/map?bbox=11.54,48.14,11.543,48.145"; try { url = new URL(urlst); con = (HttpURLConnection)url.openConnection(); // リクエストメソッドの設定 con.setRequestMethod("POST"); // リダイレクトを自動で許可しない設定 con.setInstanceFollowRedirects(false); // URL接続からデータを読み取る場合はtrue con.setDoInput(true); // URL接続にデータを書き込む場合はtrue con.setDoOutput(true); // 接続 con.connect(); // ① InputStream in = con.getInputStream(); byte bodyByte[] = new byte[1024]; String readSt = readInputStream(in); //JSONObject jsonData = new JSONObject(readSt).getJSONObject("オブジェクト名"); //JSONArray jsonArray = new JSONObject(readSt).getJSONArray("オブジェクト名"); //String St = jsonData.getString("オブジェクト名"); in.read(bodyByte); in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //catch (JSONException e){ //e.printStackTrace(); // } return null; } @Override protected void onPostExecute(String result) { mainActivity.setTextView(result); super.onPostExecute(result); // doInBackground後処理 } public String readInputStream(InputStream in)throws IOException, UnsupportedEncodingException{ StringBuffer sb = new StringBuffer(); String st = ""; BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8")); while ((st = br.readLine()) != null) { sb.append(st); } try { in.close(); }catch (Exception e){ e.printStackTrace(); } return sb.toString(); } }

###試したこと
Http通信の記事を読みためしていましたが一向にうまくいっていません

###補足情報(言語/FW/ツール等のバージョンなど)
AndroidStudio使用
プログラミング初心者です

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

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

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

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

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

guest

回答2

0

AsyncTaskを使った実装は時代遅れですよ
retrofit2 + rxjava + retrolambdaを使えばもっとスッキリ書けます

投稿2017/05/15 11:40

shivar

総合スコア74

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

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

ichita

2017/05/15 11:48

アドバイスありがとうございます。 まったく知識がないのでありがたいです。 retrofit2 + rxjava + retrolambdaの方法調べてみます。
guest

0

ベストアンサー

mainActivityが初期化されていないようです。
コールバックインターフェースを定義してActivityにコールバックするように実装しなおさないといけないですね。

投稿2017/05/14 06:51

yona

総合スコア18155

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

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

ichita

2017/05/14 07:21

ご回答いただきありがとうございます。 mainActivityの初期化についてコールバックの仕組みについていまひとつ理解できていないのですが、 この場合、mainActivityが使用できていないからこれを使用するようにということでしょうか?具体的な方法など教えて頂けました幸いです。。。 初歩的な質問ですいませんが何卒よろしくお願いします。。。
ichita

2017/05/14 07:36

現状アプリ自体は落ちなくなりましたがnullが返ってくるようになりました。
yona

2017/05/14 08:13

mainActivityは使用しません。 ・コードをコード用の記述方法に修正してください。 ・AsyncTaskはActivityと同じファイルに定義していますか? ・コールバックについて調べてください。 ・対応したことを回答として投稿しない方がいいです。
ichita

2017/05/14 10:49

ご指摘ありがとうございます。。。 ・記述方法を適切な方法に修正、現状のコードにしました ・AsyncTaskとActivityは同じファイル内に定義しております。 ・コールバックについては調べております お手数かけますがよろしくお願いいたします
yona

2017/05/14 13:53

同じファイルにあるなら直接メソッドを呼べばいいですよ。 ただ、doInBackgroundのreturnはonPostExecuteの引数として渡されるのでnullではダメです。
ichita

2017/05/14 23:00

ありがとうございます。 doInBackgroundのreturnにnullではなくreadInputStreamから返ってきたreadSTが入れば良いという理解でよろしいでしょうか?
ichita

2017/05/15 00:04

・現状return部分をreadStにしていますが、同じくnullが返ってきます。 ・直接メソッドの呼び出しというのは private void startAsync(){ HttpResponsAsync httpResponsAsync = new HttpResponsAsync(this); httpResponsAsync.execute(); の部分でしょうか
yona

2017/05/15 01:09

デバッグをしましょう。 デバッグは「理想と現実の違いを探して正すことです。」 今回は下記がデバッグの対象になります。 ・文字列を表示しようとしているが表示されない。 ・readStがnullになる。 そのため下記の作業が必要になります。 ・MainActivity#setTextViewを呼ぶ。 ・readStがnullになっている箇所をログ出力して探す。
ichita

2017/05/15 06:02

デバックから ・ InputStream in = con.getInputStream();が動いていないことが判明しました。 調べたところsetDoOutputをコメントアウトすれば動くということでそれにより動作いたしました。 お付き合いいただき誠にありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問