Appcompatactivity onCreate () не запускается при создании экземпляра класса - PullRequest
0 голосов
/ 02 февраля 2020

Я все еще учусь Android разработке, и я застрял в точке, где я предполагаю, что делаю что-то не так. Был бы признателен за вашу помощь.

У меня есть мой основной класс, который расширяет AppCompatActivity вот так, и внутри него у меня есть функция, которая создает экземпляр другого класса, где я хочу сделать некоторые вычисления на основе общих настроек магазина:

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

CalculateAvg - это класс, который я создаю. В этом классе есть метод level2 (), здесь я делаю некоторые проверки и возвращаю True или False как логическое значение. Когда я запускаю код, init () никогда не вызывается onCreate (). Я также попытался написать весь код init внутри самого onCreate, но та же проблема, onCreate никогда не запускается.

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

Любая идея, почему onCreate не запускается при создании экземпляра это в моем основном классе?

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

В соответствии с вашими требованиями нет необходимости использовать AppCompatActivity. Вы можете просто использовать как 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;
    }
}

И создать экземпляр CalculateAvg с контекстом вашей деятельности, как показано ниже:

CalculateAvg calc = new CalculateAvg(Level1_0.this);
0 голосов
/ 02 февраля 2020

Это Android, а не java, вы не можете вызывать действия с созданием нового экземпляра для вызова CalculateAvg из Level1_0, делайте код ниже в 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);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...