如何从android库类调用一个方法

时间:2014-03-31 05:11:51

标签: java android eclipse jar

我想从android库类中调用一个方法,我已经将其作为androidlib.jar导入。因为我能够调用整个类库但我不想要它,但我想调用一个特定的库类方法。

我试过这样的东西,但它显示了java.lang.Nullpointer异常

这是我的库类(AndroidLiB.class),我已经导入了它的jar文件

  public class AndroidLiB extends Activity  {

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

    public void startGPS()
    {
     Toast.makeText(getApplicationContext(),"Your GPS started",Toast.LENGTH_LONG).show();
    }

}

这是我的应用程序类,我想从上面的类

调用一个方法
  public class AndLib1 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.and_lib1);
    AndroidLiB abc = new AndroidLiB();
    abc.startGPS();

    }

}

但它不起作用

4 个答案:

答案 0 :(得分:1)

我会做这样的事情:

public class Tool {
    private Tool() {
        // no direct instantiation
    }    

    public static void startGPS(final Context context) {
         Toast.makeText(context, "Your GPS started", Toast.LENGTH_LONG).show();
    }
}

然后

public class AndroidLiB extends Activity  {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.android_li_b);
        Tool.startGPS(this);
    }
}

public class AndLib1 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.and_lib1);
        Tool.startGPS(this);
    }
}

答案 1 :(得分:1)

您可以扩展库类。例如:

public class YourActivity extends AndroidLib
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.and_lib1);
  startGPS();
}

答案 2 :(得分:1)

如果您只想要jar中的方法,那么为什么需要扩展活动。我的建议是删除扩展活动将修复NPE错误。

试试这个,

 public class AndroidLiB {
  Activity activity;
  AndroidLiB(Activity activity){ 
        this.activity = activity;
   }


  public void startGPS()
  {
    Toast.makeText(activity,"Your GPS started",Toast.LENGTH_LONG).show();
  }

 }

在你的主要课堂电话中,如

 AndroidLiB lib = new AndroidLiB (this);
 lib.startGPS();

答案 3 :(得分:0)

您尝试做的事情并不是最好的做事方式,但我假设要问的问题是如何正确导入jar。如果是这样的话:

如果使用eclipse,

  1. 确保androidlib.jar文件位于libs文件夹中。
  2. 右键点击androidlib.jar,然后选择Build Path > Add to Build Path
  3. 右键单击项目文件夹,转到Properties > Java Build Path > Order and Export,然后确保选中androidlib.jar
  4. 您当前代码的问题在于,当您致电getApplicationContext()时,Activity尚未启动,因此没有上下文。一个快速而肮脏的解决方案是重写startGPS()方法,如下所示:

    public static void startGps(Context context, String message) {
        Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    }
    

    但我宁愿将该方法放在某些Utilities类中,甚至放在父Activity类中。