メインUIスレッドでネットワークコールを行っているため、android.os.NetworkOnMainThreadExceptionが発生します。代わりにasynctaskを使用します。
asynctaskのドキュメント。 http://developer.android.com/reference/android/os/AsyncTask.html。
UIスレッドでAsyncTaskを呼び出します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new MyDownloadTask().execute();
}
class MyDownloadTask extends AsyncTask<Void,Void,Void>
{
protected void onPreExecute() {
//display progress dialog.
}
protected Long doInBackground(Void... params) {
URL url = new URL("http://www.google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
String responseMsg = con.getResponseMessage();
int response = con.getResponseCode();
return null;
}
protected void onPostExecute(VOid result) {
// dismiss progress dialog and update ui
}
}
注:AsyncTaskは、スレッドとハンドラの周りのヘルパークラスになるように設計されており、一般的なスレッド化フレームワークを構成するものではありません。 AsyncTasksは理想的には短い操作(数秒以内)に使用するのが理想的です。スレッドを長時間実行し続ける必要がある場合は、java.util.concurrent pacakgeによって提供されるさまざまなAPIを使用することを強くお勧めします。 Executor、ThreadPoolExecutor、およびFutureTaskです。
robospiceでのasynctaskの代替手段。 https://github.com/octo-online/robospice。
robospiceの機能の一部です。
1.バックグラウンドAndroidServiceネットワークリクエスト(例:Spring Androidを使用したRESTリクエスト)で非同期に実行します。
2が強く型付けされています! POJOを使用してリクエストを行い、リクエスト結果としてPOJOを取得します。
3.要求に使用されるPOJOやプロジェクトで使用するアクティビティクラスのいずれに対しても制約を適用しない。
4.JsonでJacksonとGson、Xml、フラットテキストファイル、バイナリファイル、ORM Liteを使用しても結果はキャッシュされます。
は、ネットワーク要求の結果のあなたの活動(またはその他のコンテキスト)を5.notifies場合、彼らはまだ生きている場合にのみ
すべてで、Androidのローダーのようなメモリリーク6.no
、アンドロイドAsyncTasks通知とは異なり、あなたのUIスレッド上のあなたの活動。
7.単純で強力な例外処理モデルです。
コードをAsyncTaskに移動すると、問題が解決されます。チェック[android.os.NetworkOnMainThreadException](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – Sajmon