Android AsyncTask doInBackground运行时异常

时间:2015-01-13 20:10:35

标签: android android-asynctask background-process

我有这个简单的功能,可以在Google Messaging服务上注册用户

private void registerInBackground() {
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            String msg = "";
            try {
                if (gcm == null) {
                    gcm = GoogleCloudMessaging.getInstance(context);
                }
                regId = gcm.register(Config.GOOGLE_PROJECT_ID);
                Log.d("RegisterActivity", "registerInBackground - regId: "
                        + regId);
                msg = "Device registered, registration ID=" + regId;

                storeRegistrationId(context, regId);
                appUtil.shareRegIdWithAppServer(context, regId);
                Log.d("RegisterActivity", "should be rig: " + msg);
            } catch (IOException ex) {
                msg = "Error :" + ex.getMessage();
                Log.d("RegisterActivity", "Error: " + msg);
            }
            Log.d("RegisterActivity", "AsyncTask completed: " + msg);
            return msg;
        }

        @Override
        protected void onPostExecute(String msg) {
            Toast.makeText(getApplicationContext(),
                    "Registered with GCM Server." + msg, Toast.LENGTH_LONG)
                    .show();
        }
    }.execute(null, null, null);
}

Edite

private void storeRegistrationId(Context context, String regId) {
    final SharedPreferences prefs = getSharedPreferences(
            MainActivity.class.getSimpleName(), Context.MODE_PRIVATE);
    int appVersion = getAppVersion(context);
    Log.i(TAG, "Saving regId on app version " + appVersion);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(REG_ID, regId);
    editor.putInt(APP_VERSION, appVersion);
    editor.commit();
}

结束编辑
当我执行它时,它成功地在GCM服务器上注册,并且用户成功获得了他的注册ID。 但是我收到以下异常停止和关闭应用程序。

E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.example.sparr_000.newgcm, PID: 25967
java.lang.RuntimeException: An error occured while executing doInBackground()

我是android新手。我已阅读文档,观看相关视频并在线搜索但我找不到解决方案。 我的代码出了什么问题?如何摆脱这个异常并继续安全地运行我的应用程序?

1 个答案:

答案 0 :(得分:1)

可能有很多地方出现错误,因为您在注册后运行了代码。尝试将代码分成小块或使用调试器来了解哪个步骤失败。喜欢注释掉storeRegistrationId(context,regId);                     appUtil.shareRegIdWithAppServer(context,regId); 并尝试运行,如果它工作,然后添加下一个或调试其余的功能,以知道哪一个失败。 而不是发送上下文,从当前类中获取应用程序的上下文。