繁体   English   中英

如何从android库类中调用方法

[英]How to call a method from android library class

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

我尝试过这样的事情,但它显示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();

    }

}

但这不起作用

我会做这样的事情:

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

您可以扩展库类。 例如:

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

如果只需要jar中的方法,那么为什么需要扩展Activity 我的建议是删除扩展Activity将修复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();

您要尝试执行的操作并不是真正的最佳方法,但是我假设所要问的问题是如何正确导入jar。 如果是这样的话:

如果使用日食

  1. 确保androidlib.jar文件在libs文件夹中。
  2. 右键单击androidlib.jar并选择Build Path > Add to Build Path
  3. 右键单击项目文件夹,转到“ Properties > Java Build Path > Order and Export ,然后确保选择了androidlib.jar

当前代码的问题是,当您调用getApplicationContext()Activity尚未启动,因此没有上下文。 一种快速而肮脏的解决方案是像这样重写startGPS()方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM