如何从一个 class 调用方法或部分代码到另一个?
How to call method or some part of code from one class to another?
好的,如果你又需要同样的东西,你怎么写代码?就像在我的例子中,我已经实现了如下代码的全屏广告,当按下按钮时,我需要在另一个 activity 中做同样的事情,但我不想编写所有代码,我想调用之前的 [=21] =].
我试过是
Cover cc=new Cover();
cc.showIndustrial();
但是它给我一个空指针异常。
我想做的是为工业广告创建一个新的 class 并在那里编写完整的代码,并在需要时从另一个 class 调用。我们怎么做才简单?
我已经在 Activity 上投放了这样的插页式广告
public class Cover extends AppCompatActivity{
public static String DEFAULT = "en";
InterstitialAd mInterstitialAd;
AdRequest adRequest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-xxx-xxx-xxx");
adRequest = new AdRequest.Builder().addTestDevice("0F7B337499FCAAA05252B09EFC57223C").build();
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
showInterstitial();
}
});
}
private void showInterstitial() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
如有任何帮助,我们将不胜感激!! ;)
在任何公共 class 中创建泛型函数,并在需要时调用函数使其 public 静态并根据条件传递参数。然后在整个项目的任何地方 class 调用它。
这个:
Cover cc=new Cover();
一定会以某种方式咬你的屁股。这不是实例化 activity.
的正确方法
我的建议是有一个名为 BaseActivity
的 class,它扩展了 AppCompatActivity
并有一个名为 showAd
的 public 方法,然后有您的所有其他活动都扩展了 BaseActivity
。这样您就可以在每个要显示广告的地方调用 super.showAd()
,而无需在许多地方重新声明相同的方法。
创建一个新助手class class:
public class AdsHelper {
static InterstitialAd mInterstitialAd;
static AdRequest adRequest;
public static void showAd(Activity activity) {
mInterstitialAd = new InterstitialAd(activity);
mInterstitialAd.setAdUnitId("ca-app-pub-xxx-xxx-xxx");
adRequest = new AdRequest.Builder().addTestDevice("0F7B337499FCAAA05252B09EFC57223C").build();
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
showInterstitial();
}
});
}
public static void showInterstitial() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
并在您的 2 个活动中使用它:
public class Cover extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AdHelper.showAd(this); // this will show the ad
}
您需要为另一个 Activity 创建一个新实例,然后使用新实例调用特定方法,但是...这是一个非常糟糕的选择。
抽象你的代码创建一个新的 class,例如:
你的activity
public class MyActivity extends AppCompatActivity{
//...............another irrelevant code
Cover mMyCoverClass = new Cover(MyActivity.this)
mMyCoverClass.MyMethod();
}
你的public封面class
public final class Cover
{
private static Context context;
public Cover(Context context)
{
this.context = context;
}
public void MyMethod()
{
//.........do something or retrieve something
}
}//end CoverClass
尝试此代码进行 class 调用 IndustryDetails 在其中编写一个方法(如果需要,可以使用参数)。
public static void getInsustryDetails() {
//Your code to show the details of the industry.
}
Call this method when you want to show the industry details.
eg. IndustryDetails.getIndustryDetails();
来自任何 activity.
尝试将 Ad 代码放在不同的方法中(即 getAdd),然后在要调用该方法的地方编写以下代码:
((Core) getApplicationContext).getAdd();
您在这里所做的是创建 Cover class 的对象。现在发生的事情是,每当您创建一个 class 的对象(即 Cover cc= new Cover)时,对象 cc 每次都将为空,因为您正在创建一个新对象。这就是您获得 NullPointerException 的原因。因此,在不创建新对象的情况下尝试调用该方法。
好的,如果你又需要同样的东西,你怎么写代码?就像在我的例子中,我已经实现了如下代码的全屏广告,当按下按钮时,我需要在另一个 activity 中做同样的事情,但我不想编写所有代码,我想调用之前的 [=21] =]. 我试过是
Cover cc=new Cover();
cc.showIndustrial();
但是它给我一个空指针异常。 我想做的是为工业广告创建一个新的 class 并在那里编写完整的代码,并在需要时从另一个 class 调用。我们怎么做才简单?
我已经在 Activity 上投放了这样的插页式广告
public class Cover extends AppCompatActivity{
public static String DEFAULT = "en";
InterstitialAd mInterstitialAd;
AdRequest adRequest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-xxx-xxx-xxx");
adRequest = new AdRequest.Builder().addTestDevice("0F7B337499FCAAA05252B09EFC57223C").build();
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
showInterstitial();
}
});
}
private void showInterstitial() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
如有任何帮助,我们将不胜感激!! ;)
在任何公共 class 中创建泛型函数,并在需要时调用函数使其 public 静态并根据条件传递参数。然后在整个项目的任何地方 class 调用它。
这个:
Cover cc=new Cover();
一定会以某种方式咬你的屁股。这不是实例化 activity.
的正确方法我的建议是有一个名为 BaseActivity
的 class,它扩展了 AppCompatActivity
并有一个名为 showAd
的 public 方法,然后有您的所有其他活动都扩展了 BaseActivity
。这样您就可以在每个要显示广告的地方调用 super.showAd()
,而无需在许多地方重新声明相同的方法。
创建一个新助手class class:
public class AdsHelper {
static InterstitialAd mInterstitialAd;
static AdRequest adRequest;
public static void showAd(Activity activity) {
mInterstitialAd = new InterstitialAd(activity);
mInterstitialAd.setAdUnitId("ca-app-pub-xxx-xxx-xxx");
adRequest = new AdRequest.Builder().addTestDevice("0F7B337499FCAAA05252B09EFC57223C").build();
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
showInterstitial();
}
});
}
public static void showInterstitial() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
并在您的 2 个活动中使用它:
public class Cover extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AdHelper.showAd(this); // this will show the ad
}
您需要为另一个 Activity 创建一个新实例,然后使用新实例调用特定方法,但是...这是一个非常糟糕的选择。
抽象你的代码创建一个新的 class,例如:
你的activity
public class MyActivity extends AppCompatActivity{
//...............another irrelevant code
Cover mMyCoverClass = new Cover(MyActivity.this)
mMyCoverClass.MyMethod();
}
你的public封面class
public final class Cover
{
private static Context context;
public Cover(Context context)
{
this.context = context;
}
public void MyMethod()
{
//.........do something or retrieve something
}
}//end CoverClass
尝试此代码进行 class 调用 IndustryDetails 在其中编写一个方法(如果需要,可以使用参数)。
public static void getInsustryDetails() {
//Your code to show the details of the industry.
}
Call this method when you want to show the industry details. eg. IndustryDetails.getIndustryDetails();
来自任何 activity.
尝试将 Ad 代码放在不同的方法中(即 getAdd),然后在要调用该方法的地方编写以下代码:
((Core) getApplicationContext).getAdd();
您在这里所做的是创建 Cover class 的对象。现在发生的事情是,每当您创建一个 class 的对象(即 Cover cc= new Cover)时,对象 cc 每次都将为空,因为您正在创建一个新对象。这就是您获得 NullPointerException 的原因。因此,在不创建新对象的情况下尝试调用该方法。