我有这个简单的功能,可以在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新手。我已阅读文档,观看相关视频并在线搜索但我找不到解决方案。 我的代码出了什么问题?如何摆脱这个异常并继续安全地运行我的应用程序?
答案 0 :(得分:1)
可能有很多地方出现错误,因为您在注册后运行了代码。尝试将代码分成小块或使用调试器来了解哪个步骤失败。喜欢注释掉storeRegistrationId(context,regId); appUtil.shareRegIdWithAppServer(context,regId); 并尝试运行,如果它工作,然后添加下一个或调试其余的功能,以知道哪一个失败。 而不是发送上下文,从当前类中获取应用程序的上下文。