![](/img/trans.png)
[英]How can I intercept a method call to a library class in Java or 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。 如果是这样的话:
如果使用日食
androidlib.jar
文件在libs文件夹中。 androidlib.jar
并选择Build Path > Add to Build Path
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.