无法设置回调监听器。在构造函数中值是ok,但inside方法始终为null

时间:2014-12-17 23:29:24

标签: android interface constructor callback listener

我无法弄清楚我错在哪里。我为我的一个类(A类)设置了一个监听器,在那里我保存了一些用户信息。

回到主要活动(B类)我实现了第一个类,并初始化了监听器。然后在类BI中创建一个接口的构造函数来完成初始化,这里监听器的值有点可以:“初始化时的监听器的值:com.fideli.MainActivity@425b0500”,但在我想要使用的方法中如下我总是空的,我的应用程序崩溃了。

我哪里错了?谢谢!

A类:

public class GCMActivity {

    private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    Context context; 


    public void setCallback(regidListener rListener) {
        this.rListener = rListener;     
        //here it is ok, it is not null
        System.out.println("value of the listeneris on initialisation: " + rListener);
    }

    public static interface regidListener {
        public void onRegIdSaved(String regId);
    }

    public regidListener rListener; 

    public GCMActivity(Context context) {
        this.context = context;
    }

    public void registerIfNeeded() {
        // here is already null
        System.out.println("value of the listeneris: " + this.rListener);
        if (rListener != null){
        rListener.onRegIdSaved("HEY!!");    
        }

        if (checkPlayServices()) {           
            gcm = GoogleCloudMessaging.getInstance(context);
            regid = getRegistrationId(context);
            System.out.println("Class Started!!");
            if (regid == null) {
                registerInBackground();
            }

主要活动,B类:

public class MainActivity extends FragmentActivity implements GCMActivity.regidListener  {


...

@Override
    protected void onResume() {
        super.onResume();
        uiHelper.onResume();            
        if(!isOnline()){
            showGpsButton();            
         }      

        //initialising listener for regId ready
        GCMActivity gcm = new GCMActivity(this);
        gcm.setCallback(this);

    }


@Override
    public void onRegIdSaved(String regId) {
        System.out.println("regId ready" + regId);

    }

....

1 个答案:

答案 0 :(得分:0)

是因为在你的onResume方法中,当onResume返回时,gcm是一个超出范围的局部变量吗?好像你需要把它变成一个类变量,例如mGcm。