Back

titanium module java进阶: 在static方法中使用 non-static变量

发布时间: 2015-04-10 00:22:00

refer to: http://developer.appcelerator.com/question/141128/developing-an-third-party-android-location-service-module

我们可以很轻易的写出java module, 运行 hello world,  但是光靠这个远远不够。 

我们会面临很多情况,在Ti中调用 Android activity, context, 以及更高级的内容:

下面是个例子:

在 shareSDK 中,用到了android activity 的onCreate方法。 onError 方法。

比如: 

  public void onCreate() {
    // 初始化ui
    handler = new Handler(this);
    activity.setContentView(R.layout.tpl_login_page);
    (activity.findViewById(R.id.tvOther)).setOnClickListener(this);
  }

在Titanium 的module中,提供的对应方法中,却是 static的:

  @Kroll.onAppCreate
  public static void onAppCreate(TiApplication app)
  {
    Log.d(LCAT, "inside onAppCreate");
    ShareSDK.initSDK(app);
    // 下面这句话会抛出异常:  
    //handler = new Handler(this);
  }

android中是non-static,  titanium module中是 static 方法,这就决定了,我们无法把native code 照搬过来,需要做一定的变换。 

参考上面的URL:

  // 先声明这个static 变量
  private static TestTiModuleQqLoginModule myModule;
  public TestTiModuleQqLoginModule()
  {
    super();
    // 在 constructor中 初始化它。
    myModule = this;
  }
  @Kroll.onAppCreate
  public static void onAppCreate(TiApplication app)
  {
    // 然后就可以引用啦
    handler = new Handler(myModule);
  }

Back