Appcompatactivity onCreate() 在实例化 class 时未被触发

Appcompatactivity onCreate() not getting triggered when instantiating a class

我仍在学习 Android 开发,我被困在一个我认为我做错了什么的地步。非常感谢您的帮助。

我有一个像这样扩展 AppCompatActivity 的主 class,在它里面,我有一个实例化另一个 class 的函数,我想在其中根据商店共享首选项进行一些计算:

public class Level1_0 extends AppCompatActivity {
.....
public void isTwoUnlocked(){
        CalculateAvg calc = new CalculateAvg();
        boolean L = calc.level2();
        if(L == true){
            showPopup();
            calc.finish();
        }
    }
.....
}

CalculateAvg 是我正在实例化的 class。 class 有一个名为 level2() 的方法,这是我进行一些检查的地方,return True 或 False 作为布尔值。当我 运行 代码时,init() 永远不会被 onCreate() 调用。我也尝试在 onCreate 本身中编写整个 init 代码,仍然是同样的问题,onCreate 永远不会被触发。

计算平均值 class

import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;


public class CalculateAvg extends AppCompatActivity{
    public static final String SHARED_PREFS = "sharedPrefs";
    private static final String TAG = "Level1_0";
    level10 = sharedPreferences.getBoolean(LEVEL10, false);
    ........
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }
    public void init(){
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        ........
        // do my calculations here but init() never gets called by onCreate().
        // I even tried writing entire code inside onCreate but it also didn't work
    }
    public boolean level2(){
        boolean L = false;
        if(level10 == null){
            L = false;
        }
        else{
            L = true;
        }
        return L;
    }
}

知道为什么当我在我的 main class 中实例化它时没有触发 onCreate 吗?

这个 Android 不是 java 你不能调用 activity 创建新实例来从 Level1_0 调用 CalculateAvg 在 Level1_0 onCreate 中执行下面的代码().

public class Level1_0 extends AppCompatActivity {
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent =new Intent(this,CalculateAvg.class);
    startActivity(intent);
}
}

根据您的要求不需要使用AppCompatActivity。您可以简单地使用 like class 并传递 context 来访问 SharedPreferences.

public class CalculateAvg {

    private Context mContext;

    ....

    public CalculateAvg(Context context) {
        mContext = context;
        init();
    }

    public void init(){
        SharedPreferences sharedPreferences = mContext.getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE);

       ....
    }

    public boolean level2(){
        boolean L = false;
        if(level10 == null){
            L = false;
        }
        else{
            L = true;
        }
        return L;
    }
}

并使用您的 activity 的上下文实例化 CalculateAvg,如下所示:

CalculateAvg calc = new CalculateAvg(Level1_0.this);