2016-05-19 18 views
0

ich einen Thread nenne, die die GCM-ID in eine öffentliche Variable gibt genannt gcmRegIDAufruf Thema in der Mitte der Funktion

die Probleme ist, dass der Faden nur aufgerufen, wenn die Funktion

beendet ist frage ich mich, wenn es einen Weg gibt, kann ich den Wert des gcmRegID in der Mitte der Funktion erhalten

werde ich mehr erklären Code

ich möchte den Wert von gcmRegID in CheckGCMID bekommen, aber was ich bekommen ist „“

String gcmRegID = ""; 
public void onClick(View view) { 
    String CheckGCMID; 
    GetGCM(); 
    CheckGCMID = gcmRegID; // <-- This is always return empty string 
} 

private void GetGCM() { 
    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       GCMHelper gcmRegistrationHelper = new GCMHelper(
         getApplicationContext()); 
       gcmRegID = gcmRegistrationHelper.GCMRegister("123456"); 
       // gcmRegID value is "KHDKJDIUHDHDKDK" 
      } catch (Exception bug) { 
       bug.printStackTrace(); 
      } 
     } 
    }); 

    thread.start(); 
} 
+0

versuchen, die ID in 'gcmID' zu speichern, wenn Sie die Methode' getGcm nennen() '' wie gcmID = getGcm(); ' –

+0

Nehmen Sie eine AsyncTask wie in http : //stackoverflow.com/a/31686447 und tun Sie alles, was Sie tun müssen, wenn Sie das Ergebnis aus der 'onPostExecute'-Methode erhalten. – zapl

+0

Wie zapl sagte, dies ist asynchrone, Verwenden Sie keinen Thread, wenn Sie synchron bleiben wollen. Und Sie sollten über camelCase lesen. – AxelH

Antwort

1

Sie sollten einen Callback verwenden, um Ihren Wert asynchron zu erhalten.

so etwas wie dieses Versuchen:

public void onClick(View view) { 

      String CheckGCMID; 
      GetGCM(new MyCallback(){ 
       @Override 
       public void receivedString(String myString) { 
        //use your id here 
        System.out.println(myString); 
       } 
      }); 

    } 


private interface MyCallback{ 
    public void receivedString(String myString); 
} 

private void GetGCM(MyCallback callback) { 
    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       GCMHelper gcmRegistrationHelper = new GCMHelper (getApplicationContext()); 
       String gcmRegID = gcmRegistrationHelper.GCMRegister("123456"); 
       callback.receivedString(gcmRegID); 
      } catch (Exception bug) { 
       bug.printStackTrace(); 
      } 

     } 
    }); 
    thread.start(); 
} 
+0

funktioniert nicht !! – asmgx

+0

was funktioniert nicht? Sie sollten die empfangene ID nur in der Callback-Methode verwenden. – jules