背景
我在我的应用程序中加入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);
仅打印默认值。
答案 0 :(得分:0)
在doInBackground()
中,if语句中的条件是错误的。它应该是:
if (token!=null && !token.isEmpty())