###現状
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を利用)動かしてますが
問題が出ていないので余計に謎が深まってしまいました。