「android.os.NetworkOnMainThreadException」はメインスレッドでネットワーク連携などをやるとandroidosのバージョンが3.0以上だったら起こるようになっているようです。androidos2.3とかのスマホを所有していて、テストでは起こらなかったけど配布してユーザーからの報告で築くということがると思います。
AndroidはGingerBreadで追加になった「StrictMode」が3.0以降はデフォルトで有効になっており、メインスレッド(UIスレッド)でネットワーク処理を行うと同例外がスローされるのである。
要は、サーバーとの連携などするときは、「AsyncTask」を継承した内部クラスを作って、そこでネットワークの処理を実行させなくてはならないということ。Android4.0以降であればローダー(AsyncTaskLoader)を使ってもいいらしい。
public class MainActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
~
AsyncCl aul = new AsyncCl(this);
aul.execute();
~
}class AsyncCl extends AsyncTask<String, Void, String> {
public AsyncUrlConn(Context context){
this.context = context;
}protected String doInBackground(String… params) {
~
}protected void onPostExecute(String json) {
~
}}
もっと簡単な方法としては、テスト用には
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());