El registro de Google Cloud Messaging falla

PROBLEMA RESUELTO ACTUALIZAR:

Resolví este problema. El problema está en el método.registerGCMInBackground(). GoogleCloudMessaging.getInstance() espera elApplicationContext.

    private void registerGCMInBackground(final String userId) {
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            String msg = "";
            Log.d("Register GCM", "started");
            try {
                if (gcm == null) {
                    //PROBLEM SOLVED HERE
                    gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
                    Log.d("GCM", gcm.toString());
                }



                regid = gcm.register(SENDER_ID); //////NULL POINTER EXCEPTION
                msg = "Device registered, registration ID=" + regid;



                // You should send the registration ID to your server over HTTP
                sendRegistrationIdToBackend(userId, regid);

                // For this demo: we don't need to send it because the device will send
                // upstream messages to a server that echo back the message using the
                // 'from' address in the message.

                // Persist the regID - no need to register again.
                storeRegistrationId(context, regid);
            } catch (IOException ex) {
                return "Error :" + ex.getMessage();
                // If there is an error, don't just keep trying to register.
                // Require the user to click a button again, or perform
                // exponential back-off.
            }
            return regid;
        }

-------- Problema resuelto--------------

Tengo problemas para registrar mi dispositivo Android enGCM (Google Cloud Messaging). Estoy usando el ejemplo deDesarrolladores de Google. Con el uso del ejemplo de desarrollador de Google me aseguré de lo siguiente:

añadiendo la última biblioteca de Play Servicesañadiendo el último JAR de servicios de juegoarchivo de manifiesto correctotener Play Services APK instalado en el dispositivousando el número de proyecto como SENDER_ID

Parece ser el mismo problema como estePregunta. Lamentablemente todavía no se responde. Recibo una excepción de puntero nulo en la siguiente línea:

regid = gcm.register(SENDER_ID);

Aquí está mi código de problema:Actividad de muestra

     static final String TAG = "GCM";
    public static final String EXTRA_MESSAGE = "message";
    public static final String PROPERTY_REG_ID = "registration_id";
    private static final String PROPERTY_APP_VERSION = "appVersion";
    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    String SENDER_ID = "xxxxxxxxxxxxxxx";
    GoogleCloudMessaging gcm;
    AtomicInteger msgId = new AtomicInteger();
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.registration);

            final Button register = (Button) findViewById(R.id.btn_register);

            register.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                     EditText mobilePhoneNumber = (EditText) findViewById(R.id.et_phonenumber);

                    if(!mobilePhoneNumber.getText().toString().isEmpty()){
                    User user = new User();
                    user.setMobilePhoneNumber(mobilePhoneNumber.getText().toString());

                     EditText firstName = (EditText) findViewById(R.id.et_firstName);
                    user.setFirstName(firstName.getText().toString());

                     EditText lastName = (EditText) findViewById(R.id.et_lastName);
                    user.setLastName(lastName.getText().toString());

                     EditText email = (EditText) findViewById(R.id.et_email);
                    user.setEmail(email.getText().toString());
                    Log.d("email: ", user.getEmail().toString());

                    if (android.os.Build.VERSION.SDK_INT>14) {
                        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                                .permitAll().build();
                        StrictMode.setThreadPolicy(policy);
                    }

                    UserService userService = new UserService();
                    String path = userService.createNewUser(user);




                    Log.d("Location: ", path);
                    Toast.makeText(getApplicationContext(), 
                            path, Toast.LENGTH_LONG).show();

                    String userID = path.replace("/user/", "");
                    userID = userID.replace("/users/", "");
                    Log.d("UserID:::", userID);
                    Log.d("User Service", "register in Background started");
                    if(checkPlayServices()){
                    registerGCMInBackground(userID);
                    }

                    }
                    else{
                        Toast.makeText(getApplicationContext(), 
                                "Please enter your Mobile Phone Number", Toast.LENGTH_LONG).show();
                    }           
                }
            });

    private void registerGCMInBackground(final String userId) {
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                String msg = "";
                Log.d("Register GCM", "started");
                try {
                    if (gcm == null) {
                        gcm = GoogleCloudMessaging.getInstance(context);
                        Log.d("GCM", gcm.toString());
                    }



                    regid = gcm.register(SENDER_ID); //////NULL POINTER EXCEPTION
                    msg = "Device registered, registration ID=" + regid;



                    // You should send the registration ID to your server over HTTP
                    sendRegistrationIdToBackend(userId, regid);

                    // For this demo: we don't need to send it because the device will send
                    // upstream messages to a server that echo back the message using the
                    // 'from' address in the message.

                    // Persist the regID - no need to register again.
                    storeRegistrationId(context, regid);
                } catch (IOException ex) {
                    return "Error :" + ex.getMessage();
                    // If there is an error, don't just keep trying to register.
                    // Require the user to click a button again, or perform
                    // exponential back-off.
                }
                return regid;
            }

            @Override
            protected void onPostExecute(String msg) {

            }
        }.execute(null, null, null);
    }

Aquí está mi salida de consola:Salida de consola

Estoy tratando desde hace dos días completos con este problema. :( ¡Muchas gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta