Google Cloud Messaging-Registrierung schlägt fehl
PROBLEM GELÖST AKTUALISIEREN:
Ich habe dieses Problem gelöst. Das Problem liegt in der MethoderegisterGCMInBackground()
. GoogleCloudMessaging.getInstance()
erwartet dieApplicationContext
.
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;
}
-------- Gelöstes Problem --------------
Ich habe Probleme bei der Registrierung meines Android-Geräts unterGCM
(Google Cloud Messaging). Ich benutze das Beispiel vonGoogle-Entwickler. Mit dem Google Developer Example habe ich folgendes sichergestellt:
Es scheint dasselbe Problem zu seinFrage. Leider noch nicht beantwortet. Ich erhalte eine Nullzeiger-Ausnahme in der folgenden Zeile:
regid = gcm.register(SENDER_ID);
Hier ist mein Problemcode:Beispielaktivität
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);
}
Hier ist meine Konsolenausgabe:Konsolenausgabe
Ich beschäftige mich seit zwei vollen Tagen mit diesem Thema. :( Vielen Dank!