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

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

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

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

Android

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Android Studio

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

Q&A

1回答

4484閲覧

Androidでの非同期処理。POSTでサーバーに渡したい

nocodenoscript

総合スコア8

Java

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

Android

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Android Studio

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

0グッド

0クリップ

投稿2016/05/10 10:06

編集2016/05/11 01:27

###現状

Androidで取得したデーターをサーバー(さくらインターネット)上のデーターベースに
PHPでPOSTしたいです。

メインスレッドで処理出来ていた頃は良かったのですが
Andoroid4?以降から非同期処理を使わなければいけなくなり
またHttpPost(HttpGet)も非推奨になったみたいでエラーが発生し困っています。

以前、書いていたコードは下記の通りです。

MainActivity.java public class MainActivity extends Activity { private static final String url = "http://アドレス.php"; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); nameValuePair.add(new BasicNameValuePair("値1", data01)); try{ httppost.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8")); HttpResponse response = httpclient.execute(httppost); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); response.getEntity().writeTo(byteArrayOutputStream); String oriText = byteArrayOutputStream.toString(); } catch(UnsupportedEncodingException e){ System.out.println("UnsupportedEncodingException"); } catch(IOException e){ System.out.println("IOException"); } }

上記コードを

MainActivity.java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ~省略~ String url = "http:///アドレス.php"; final AsyncHttpRequest asynctask = new AsyncHttpRequest(this); //実行 asynctask.execute(url, data01); } public void result_job(String result) { System.out.println("メインに戻ってきた"); } }
AsyncHttpRequest.java public class AsyncHttpRequest extends AsyncTask<String, String, String> { private MainActivity _main; public AsyncHttpRequest(MainActivity MainActivity) { super(); _main = MainActivity; } @Override protected String doInBackground(String...params) { HttpURLConnection con = null; URL url = null; String urlSt = params[0]; String data01 = params[1]; try { url = new URL(urlSt); con = (HttpURLConnection)url.openConnection(); con.setRequestMethod("POST"); con.setDoOutput(true); con.setChunkedStreamingMode(0); con.connect(); //POSTパラメータ String postData = "data01=" + data01; //POSTデータ送信処理 OutputStream out = null; out = con.getOutputStream(); out.write(postData.getBytes("UTF-8")); out.flush(); out.close(); out.close(); InputStream in = con.getInputStream(); System.out.println("成功"); } catch(IOException e){ System.out.println("・IOException"); } finally { if (con != null) { con.disconnect(); } } return null; } @Override protected void onPostExecute(String result) { _main.result_job(result); } }

としたものを

http://アドレス.php ~データーベース接続省略~ $data01 = $_POST[data01]; $sql = mysql_query( "INSERT INTO `テーブル名` (`data01`) VALUES ('$data01')" );

と記述したPHPファイルで受け取ろうとしています。
http://アドレス.php
$data01に適当な値を入れてやるとデーターベースに書きこまれるので
PHPファイルに問題はないと考えています。

###問題点
上記のプログラムを実行すると
System.out.println:IOException
System.out.println:メインに戻ってきた
と表示されてデータベースに書きこまれていません。

https://teratail.com/questions/29033
https://teratail.com/questions/29334
http://qiita.com/a_nishimura/items/19cf3f60ad1dd3f66a84
http://www.programing-style.com/android/android-api/android-httpurlconnection-post/
http://blog.a1yama.com/entry/2016/01/26/154932
http://techbooster.jpn.org/andriod/hacks/7902/
https://www.ipentec.com/document/document.aspx?page=android-get-html-file-use-http-for-android4
上記、参考にしたサイトです。

###追記です。
out.close();
上記ありがとうございます。気付いていませんでした。

printStackTrace()を出した結果が下記です。

java.net.UnknownHostException: http:///アドレス.php at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:279) at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89) at com.アプリ名.AsyncHttpRequest.doInBackground(AsyncHttpRequest.java:32) at com.アプリ名.AsyncHttpRequest.doInBackground(AsyncHttpRequest.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)

今は時間が無くて調べられていないのですが
UnknownHostExceptionとあるのでDNSの名前解決が出来ていないみたいです?
同じアプリ内でサーバー上の別ルートに置いている掲示板(webviewを利用)動かしてますが
問題が出ていないので余計に謎が深まってしまいました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/05/10 14:21

catchの中でprintStackTrace()をしてスタックトレースを出してみて下さい。これで,どこでエラーが起こったのかわかるはずです。あと,もしかしたら違うかもしれませんが, out.close();を2回呼んでいるのがいけないのかもしれません。
guest

回答1

0

アドレスは正しいですか?
http:///とスラッシュが3になってるのは誤字ですか?

投稿2016/05/11 03:21

yona

総合スコア18155

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

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

nocodenoscript

2016/05/11 07:28 編集

! 完全にミスしていました。 javaファイルに記述しているものを直接コピペし ブラウザのアドレスに挿入してアクセスしていたのでまさかとは思いましたが 「///」となっていたのが原因でした。 これで上手くいけば良かったのですが POSTしたはずなのにデータベースに書かれた数値は空でした。 以前回答されていた https://teratail.com/questions/23043 を見て追記しますと 送信する文字列は 半角英数字に日本語文字です。 受信側のPHPファイルを $data01 = $_GET[data01]; $data01 = $_REQUEST[data01]; 等に変更してみましたが、それでもダメでした。 またリクエストの件ですが SQLに空とはいえレコードは挿入されるので ファイルにアクセスをするまではいっていると思います。 ステータスコードは 表示の仕方を調べているためお待ちください。 ステータスコードを取得してみた所 200が返ってきていました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14504&forum=12 を見ると順番が怪しそうだったので POSTデータ処理より下記の部分を //POSTデータ送信処理 OutputStream out = null; out = con.getOutputStream(); out.write(postData.getBytes("UTF-8")); InputStream in = con.getInputStream(); out.flush(); out.close(); int status = con.getResponseCode(); System.out.println("ステータス表示:" + status); と変えてみましたがダメでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問