DRYな備忘録

Don't Repeat Yourself.

【Android】java.io.IOException: MAIN_THREAD

問題

掲題のエラーが出る。

java.io.IOException: MAIN_THREAD

なんで?

調査

Note that because the GCM methods register() and unregister() are blocking, this has to take place on a background thread.

メインスレッドで呼んではいけないメソッドを呼んでしまったっぽい。

(余談だが、GoogleCloudMessaging.register()はdeprecatedらしい。APIを叩かなきゃいけないっぽいまじだるい

解決

AsyncTaskクラスを使う。基本こんな感じなので

        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                // ここでやりたかったことをするべし
                String msg = "なんかした結果";
                return msg;
            }
            @Override
            protected void onPostExecute(String msg) {
                Log.d("onPostExecute", msg);
            }
        }.execute(null, null, null);

doInBackgroundの中で、呼びたいメソッドを呼ぶこと。

DRY