Android GCM注册ID返回默认值

时间:2016-02-04 12:42:46

标签: java android android-asynctask google-cloud-messaging

背景

我在我的应用程序中加入GCM服务.ClientActivity.java调用方法Date.prototype.diff = function(y,m,d){ var cleanDate = function(x){ x.setHours(0); x.setMinutes(0); x.setSeconds(0); return x; } var dateToCompare = new Date(y,m,d), date = cleanDate(this), daysCount = [31,28,31,30,31,30,31,31,30,31,30,31], d = (date > dateToCompare ? date : dateToCompare), d1 = (date < dateToCompare ? date : dateToCompare), days = 0, months = 0, years = 0; var yearDiff = function(){ years = d.getFullYear() - (d1.getFullYear() + 1); years = years < 0 ? 0 : years; } var monthDiff = function(){ months = d.getFullYear() == d1.getFullYear() ? (d.getMonth() - 1) - d1.getMonth() : d.getMonth() + (12 - (d1.getMonth() + 1)); if(months >= 12){ years = years + Math.floor(months / 12) months = months % 12; } } var getAdjustedDays = function(){ var adjustedDays = 0; for(i = (d1.getMonth() + 1); i <= 12; i++){ if(daysCount[i] == 31){ adjustedDays++; } } return adjustedDays; } var dayDiff = function(){ var month = d1.getMonth(); if(month == 1 && months == 0 && years == 0){ days = d.getDate() - d1.getDate(); }else if(month == 1){ days = (isLeapYear(d1.getFullYear()) ? 29 - d1.getDate() : 28 - d1.getDate()) + d.getDate() + (d1.getDate() == d.getDate() ? 1 : 2); days = Math.ceil(days - (getAdjustedDays() / 2)); }else{ days = (daysCount[month] - d1.getDate()) + d.getDate() + (d1.getMonth() == d.getMonth() ? 2 : 1); days = Math.ceil(days - (getAdjustedDays() / 2)); } getAdjustedDays(); if(days >= 30){ months = months + Math.floor(days / 30); //averge are 30 days days = days % 30; } } var isLeapYear = function(year) { return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); } yearDiff(); monthDiff(); dayDiff(); return {"years" : years, "months" : months, "days" : days}; } console.log(new Date().diff(1987, 2, 4)); console.log(new Date().diff(2005, 8, 25)); console.log(new Date().diff(2018, 8, 25)); ,它获取注册ID并将其存储在sharedPreference中。所有这都发生在后台。注册ID随后保存在数据库中凌空。代码如下:

getGcmToken()

问题

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_client); SharedPreferences appPrefs=mContext.getSharedPreferences("gcm",Context.MODE_PRIVATE); String token=appPrefs.getString(GCM_TOKEN,""); //if starts if(token.isEmpty()){ try{ getGCMToken(); StringRequest stringRequest=new StringRequest(Request.Method.POST, REGISTRATIONID_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject value=new JSONObject(response); String message=value.getString("message"); Toast.makeText(ClientActivity.this,message,Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(ClientActivity.this,error.toString(),Toast.LENGTH_LONG).show(); } }){ @Override protected Map<String,String> getParams()throws AuthFailureError { Map<String,String> map=new HashMap<String,String>(); SharedPreferences sharedPrefs=getSharedPreferences("api_key",Context.MODE_PRIVATE); String api_key=sharedPrefs.getString("api_key", ""); Log.i("out88", api_key); map.put(KEY_APIKEY, api_key); SharedPreferences appPrefs=getSharedPreferences("gcm",Context.MODE_PRIVATE); String reg_id=appPrefs.getString(GCM_TOKEN,"default"); **Log.i("reg",reg_id);------>this statement** map.put(KEY_REGID, reg_id); return map; } }; RequestQueue requestQueue= Volley.newRequestQueue(this); requestQueue.add(stringRequest); }catch(Exception e){ e.printStackTrace(); } }//if ends mTextView=(TextView)findViewById(R.id.textView2); } private void getGCMToken(){ new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try{ InstanceID instanceID=InstanceID.getInstance(mContext); String token=instanceID.getToken(SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE,null); if(token!=null&&token.isEmpty()){ SharedPreferences appPrefs=mContext.getSharedPreferences("gcm",Context.MODE_PRIVATE); SharedPreferences.Editor prefsEditor=appPrefs.edit(); prefsEditor.putString(GCM_TOKEN, token); prefsEditor.apply(); } Log.i("GCM",token);----->this statement } catch (IOException e) { e.printStackTrace(); } return null; } }.execute(); } } 打印登记令牌,看起来像e2DgrsZPGKU:APA91bF_73a6-o5CLV-gdcZzYFAbtikJqi-5w6gDSCaRa4z8-1iGLeV5SS6hQkW8pj_g_DxBe7JLDsOPMGu3y1GkKw1vpn_ZEWIeCwbSITpd0pLwaz50W8uzHKNghvnf1xxxxxxxxxxx

所以我认为它是正确的注册ID。但是当我从共享首选项文件中检索它时,它返回默认值并将其存储在数据库中。语句Log.i("GCM",token);仅打印默认值。

1 个答案:

答案 0 :(得分:0)

doInBackground()中,if语句中的条件是错误的。它应该是:

if (token!=null && !token.isEmpty())
相关问题