2016-05-17 17 views
0

Ich erstelle eine App mit Google Cloud Messaging. Nachdem ich die App geöffnet habe und meine Hauptaktivität (LoginActivity) die App registriert und das "GCM Registration Token" erhält, lege ich folgende Zeile in RegistrationIntentService.String wurde leer nachdem er gefüllt wurde

sharedPreferences.edit().putString("token", token).apply(); 

Die Aktivität ruft dieses Token ab und zeigt einen Toast mit dem Token an. Aber nachdem ich einen Knopf (btn_login) drücken wird der Token geleert ...
Dies ist der Code in LoginActivity

private BroadcastReceiver mRegistrationBroadcastReceiver; 
private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; 
private boolean isReceiverRegistered; 
private Context context; 
static String token; 
Button btn_login; 
EditText txt_GebruikersNaam, txt_Wachtwoord; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    context = getApplicationContext(); 
    btn_login = (Button)findViewById(R.id.btn_login); 
    txt_GebruikersNaam= (EditText)findViewById(R.id.txt_GebruikersNaam); 
    txt_Wachtwoord= (EditText)findViewById(R.id.txt_Wachtwoord); 

    btn_login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String gebruikersnaam = txt_GebruikersNaam.getText().toString(); 
      String wachtwoord = txt_Wachtwoord.getText().toString(); 
      if(!gebruikersnaam.equals("") || !wachtwoord.equals("")) { 
       // HERE THE TOKEN IS EMPTY 
       String json = createJsonPost(gebruikersnaam, wachtwoord, token); 
      } 

     } 
    }); 
    token = getToken(); 
} 

private String getToken(){ 
    final String[] token = {""}; 
    mRegistrationBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
      boolean sentToken = sharedPreferences.getBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, false); 
      if (sentToken) { 
       CharSequence text = sharedPreferences.getString("token",null); 
       Toast.makeText(context, text.toString(), Toast.LENGTH_SHORT).show(); 
       token[0] = text.toString(); 
      } else { 
       Toast.makeText(context, "Geen verbinding", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

    // Registering BroadcastReceiver 
    registerReceiver(); 

    if (checkPlayServices()) { 
     // Start IntentService to register this application with GCM. 
     Intent intent = new Intent(this, RegistrationIntentService.class); 
     startService(intent); 
    } 
    return token[0]; 
} 

private void registerReceiver(){ 
    if(!isReceiverRegistered) { 
     LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver, 
       new IntentFilter(QuickstartPreferences.REGISTRATION_COMPLETE)); 
     isReceiverRegistered = true; 
    } 
} 

private String createJsonPost(String Naam, String Wachtwoord, String token){ 
    JSONObject jsonObject = new JSONObject(); 
    JSONObject jsonData = new JSONObject(); 

    jsonData.put("user", Naam); 
    jsonData.put("pass", Wachtwoord); 
    jsonData.put("token", token); 

    jsonObject.put("authorization", jsonData); 
} 
+0

wo ist Ihr ** Spartoken zum Präferenzcode ** ?? –

+0

Nicht sicher, ob das hilft, aber Sie speichern das Token in 'token [0]', aber Ihre Variable ist ein einfacher 'String'. Zweitens sehe ich keinen Ort, an dem Sie das Token speichern. – kazbeel

Antwort

1

Dies liegt daran, dass Ihre token = getToken(); ausgeführt wird, bevor onReceive(Context context, Intent intent) ausgelöst wird. Sie sollten stattdessen token in der onReceive(Context context, Intent intent) Funktion einstellen.

+0

Danke, das hat es gelöst .. Einfache Lösung, aber nach 3 Stunden Googeln konnte ich es einfach nicht herausfinden .. Danke nochmal! – willemjan92

0

Ihr "Token" String kann noch nicht gespeichert werden. Rufen Sie einfach commit() anstelle der apply() -Methode der SharedPreferences auf.

+0

Ich fürchte, ich stimme dir völlig nicht zu, da 'commit()' ein synchroner Aufruf ist, der vom UI-Thread vermieden werden sollte. – kazbeel

+0

Warum müssen Sie über BroadcastReceiver auf das gespeicherte Token zugreifen? – Seishin

Verwandte Themen