Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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
Android 应用程序未将GCM注册ID发送到服务器_Android_Notifications_Google Cloud Messaging - Fatal编程技术网

Android 应用程序未将GCM注册ID发送到服务器

Android 应用程序未将GCM注册ID发送到服务器,android,notifications,google-cloud-messaging,Android,Notifications,Google Cloud Messaging,我使用一个示例代码来学习,但是RegId没有发送到服务器。调用是正确的,因为服务器接受它,没有错误,并且在数据库中添加了一行,但regid字符串为空。我花了好几个小时研究代码,但没能找出哪里出了问题 主要活动 GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); final String regId = GCMRegistrar.getRegistrationId(this); if (

我使用一个示例代码来学习,但是RegId没有发送到服务器。调用是正确的,因为服务器接受它,没有错误,并且在数据库中添加了一行,但regid字符串为空。我花了好几个小时研究代码,但没能找出哪里出了问题

主要活动

    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    final String regId = GCMRegistrar.getRegistrationId(this);
    if (!regId.equals("")) {
      sendIdToServer(regId);
    } else {
      GCMRegistrar.register(this, Constants.SENDER_ID);
    }

    ...

    private void sendIdToServer(String regId) {
    String status = getString(R.string.gcm_registration, regId);
    mStatus.setText(status);
    (new SendRegistrationIdTask(regId)).execute();
    }

    ...

    private final class SendRegistrationIdTask extends
      AsyncTask<String, Void, HttpResponse> {
    private String mRegId;

    public SendRegistrationIdTask(String regId) {
      mRegId = regId;
    }

    @Override
    protected HttpResponse doInBackground(String... regIds) {
      String url = Constants.SERVER_URL;
      HttpPost httppost = new HttpPost(url);

      try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("regid", mRegId));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpClient httpclient = new DefaultHttpClient();
        return httpclient.execute(httppost);
      } catch (ClientProtocolException e) {
        Log.e(Constants.TAG, e.getMessage(), e);
      } catch (IOException e) {
        Log.e(Constants.TAG, e.getMessage(), e);
      }

      return null;
    }

    @Override
    protected void onPostExecute(HttpResponse response) {
      if (response == null) {
        Log.e(Constants.TAG, "HttpResponse is null");
        return;
      }

      StatusLine httpStatus = response.getStatusLine();
      if (httpStatus.getStatusCode() != 200) {
        Log.e(Constants.TAG, "Status: " + httpStatus.getStatusCode());
        mStatus.setText(httpStatus.getReasonPhrase());
        return;
      }

      String status = getString(R.string.server_registration, mRegId);
      mStatus.setText(status);
    }
  }
gcmregistar.checkDevice(这个);
GCMRegistar.检查清单(本);
最终字符串regId=gcmregistar.getRegistrationId(this);
如果(!regId.equals(“”){
sendIdToServer(regId);
}否则{
gcmregistar.register(这是常量.SENDER\u ID);
}
...
私有void sendIdToServer(字符串regId){
字符串状态=getString(R.String.gcm_注册,regId);
mStatus.setText(状态);
(新建SendRegistrationIdTask(regId)).execute();
}
...
私有最终类SendRegistrationIdTask扩展
异步任务{
私有字符串mRegId;
公共SendRegistrationIdTask(字符串regId){
mRegId=regId;
}
@凌驾
受保护的HttpResponse doInBackground(字符串…寄存器){
字符串url=Constants.SERVER\u url;
HttpPost HttpPost=新的HttpPost(url);
试一试{
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“regid”,mRegId));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpClient HttpClient=新的DefaultHttpClient();
返回httpclient.execute(httppost);
}捕获(客户端协议例外e){
Log.e(Constants.TAG,e.getMessage(),e);
}捕获(IOE异常){
Log.e(Constants.TAG,e.getMessage(),e);
}
返回null;
}
@凌驾
受保护的void onPostExecute(HttpResponse响应){
如果(响应==null){
Log.e(Constants.TAG,“HttpResponse为null”);
返回;
}
StatusLine httpStatus=response.getStatusLine();
如果(httpStatus.getStatusCode()!=200){
Log.e(Constants.TAG,“Status:+httpStatus.getStatusCode());
mStatus.setText(httpStatus.getReasonPhrase());
返回;
}
String status=getString(R.String.server\u注册,mRegId);
mStatus.setText(状态);
}
}
如果您可以确认(调试)mRegId在此行中有一个值:

nameValuePairs.add(new BasicNameValuePair("regid", mRegId));
然后将下一行更改为:

    httpost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));

设置显式编码。

谢谢,正在检查和调整!但当他将应用程序提供给用户时,他无法确认该值,对吗?我的意思是,目的是将用户注册id发送到服务器。@323这就是为什么在将代码发送给用户之前要测试并运行代码。