有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

函数中间调用java线程

我正在调用一个线程,该线程将GCM ID返回到名为gcmRegID的公共变量中

问题在于,只有在函数结束后才会调用线程

我想知道在函数

的中间是否有一个方法可以得到GCMRIEID的值。

我会用代码解释更多

我想在CheckGCMID中获取gcmRegID的值,但我得到的是“”

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();
}

共 (1) 个答案

  1. # 1 楼答案

    您应该使用回调来异步获取值

    试试这样:

    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();
    }