Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android GCM注册id返回默认值_Java_Android_Android Asynctask_Google Cloud Messaging - Fatal编程技术网

Java Android GCM注册id返回默认值

Java Android GCM注册id返回默认值,java,android,android-asynctask,google-cloud-messaging,Java,Android,Android Asynctask,Google Cloud Messaging,背景 我正在将GCM服务合并到我的应用程序中。ClientActivity.java调用方法getGcmToken(),该方法获取注册id并将其存储在SharedReferences中。所有这些都发生在后台。然后使用volley将注册id保存在数据库中。代码如下所示 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV

背景

我正在将GCM服务合并到我的应用程序中。ClientActivity.java调用方法
getGcmToken()
,该方法获取注册id并将其存储在SharedReferences中。所有这些都发生在后台。然后使用volley将注册id保存在数据库中。代码如下所示

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();
    }

}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u客户端);
SharedReferences appPrefs=mContext.getSharedReferences(“gcm”,Context.MODE\u PRIVATE);
String token=appPrefs.getString(GCM_token,“”);
//如果开始
if(token.isEmpty()){
试一试{
getGCMToken();
StringRequest StringRequest=新的StringRequest(Request.Method.POST,REGISTRATIONID\u URL,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject值=新JSONObject(响应);
字符串消息=value.getString(“消息”);
Toast.makeText(ClientActivity.this、message、Toast.LENGTH_LONG.show();
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(ClientActivity.this,error.toString(),Toast.LENGTH_LONG.show();
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map Map=newhashmap();
SharedReferences SharedReferences=GetSharedReferences(“api_密钥”,Context.MODE_PRIVATE);
String api_key=sharedPrefs.getString(“api_key”,”);
Log.i(“out88”,api_密钥);
map.put(KEY\u APIKEY,api\u KEY);
SharedReferences appPrefs=GetSharedReferences(“gcm”,Context.MODE\u PRIVATE);
String reg_id=appPrefs.getString(GCM_标记,“默认”);
**Log.i(“reg”,reg_id);------>此语句**
地图放置(注册表项、注册表id);
返回图;
}
};
RequestQueue RequestQueue=Volley.newRequestQueue(this);
添加(stringRequest);
}捕获(例外e){
e、 printStackTrace();
}
}//如果结束
mTextView=(TextView)findViewById(R.id.textView2);
}
私有void getGCMToken(){
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
InstanceID InstanceID=InstanceID.getInstance(mContext);
String token=instanceID.getToken(发送方ID,GoogleCloudMessaging.INSTANCE ID,作用域,null);
if(token!=null&&token.isEmpty()){
SharedReferences appPrefs=mContext.getSharedReferences(“gcm”,Context.MODE\u PRIVATE);
SharedReferences.Editor prefsEditor=appPrefs.edit();
prefsEditor.putString(GCM_令牌,令牌);
prefsEditor.apply();
}
Log.i(“GCM”,token);----->此语句
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
}.execute();
}
}
问题

Log.i(“GCM”,令牌)打印类似e2DgrsZPGKU的注册令牌:APA91bF_73a6-o5CLV-gdcZzYFAbtikJqi-5w6gDSCaRa4z8-1iGLeV5SS6hQkW8pj_g_DXBE7JLDSOPMGU3Y1GKW1VPN_ZewiecwBSITPD0PLWAZ50W8UZKNGHVNF1XXXXXX

所以我假设它是正确的注册id。但当我从共享首选项文件检索它时,它返回默认值并将其存储在数据库中
只打印默认值。

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

if (token!=null && !token.isEmpty())

不起作用。另外,语句
Log.i(“reg”,reg\u id)
打印“default”证明它正在输入if语句。我想在
String reg\u id=appPrefs.getString(GCM\u TOKEN,“default”)
或类似的内容之后执行doInBackground,if语句中没有
Log
语句
Log.i(“GCM”,token)
在if语句之外。在if语句中添加
Log
语句,以确认令牌存储在首选项中。Log语句是覆盖映射的地方。我指出了这一点。您是否同意当
instanceID.getToken()
返回一个有效的令牌时,您在代码中显示的if语句将阻止令牌存储在首选项中,因为
token.isEmpty()
返回false?很抱歉,您误解了。我的if语句不正确。谢谢您的帮助!