Ошибка вызова метода с инициализацией

Помогите разобраться, в чем я ошибаюсь? В MainActivity вызывается LVL_UP(), но вылетает с ошибкой в Next(), на show.start(). Я так полагаю из-за того, что img_nextlvl = findViewById(R.id.img_nextlvl); объявлен в Main. Но можно ли сделать иначе? Или проблема в чем-то другом?

Main:

public class MainActivity extends AppCompatActivity {

    Supports taste = new Supports();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void Go(View v){
        taste.LVL_UP(11);
    }
}

Supports:

public class Supports {

    ImageView img_nextlvl;
    protected int next_lvl = 1;

    protected int LVL_UP(int income){
        if (income >= 3 && income <= 20) {
            this.next_lvl = 2;
            Next();
        } else if (income >= 21 && income <= 40) {
            this.next_lvl = 3;
            Next();
        }
        return next_lvl;
    }  //увеличение уровня, подсчет

    protected void Next(){
        ObjectAnimator show = ObjectAnimator.ofFloat(img_nextlvl, View.ALPHA, 1f, 0f);
        show.setDuration(1000);
        show.setRepeatMode(ValueAnimator.REVERSE);
        show.start();
    }
}

Много-много красного текста:

2020-07-09 18:00:25.055 6805-6805/? E/ijer.app.taste: Unknown bits set in runtime_flags: 0x8000
2020-07-09 18:00:25.670 6805-6873/freijer.app.taster E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2020-07-09 18:00:25.670 6805-6873/freijer.app.taster E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2020-07-09 18:00:28.436 6805-6805/freijer.app.taster E/AndroidRuntime: FATAL EXCEPTION: main
    Process: freijer.app.taster, PID: 6805
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
        at android.view.View.performClick(View.java:7125) 
        at android.view.View.performClickInternal(View.java:7102) 
        at android.view.View.access$3500(View.java:801) 
        at android.view.View$PerformClick.run(View.java:27336) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setAlpha(float)' on a null object reference
        at android.view.View$3.setValue(View.java:26927)
        at android.view.View$3.setValue(View.java:26924)
        at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1379)
        at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:990)
        at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:684)
        at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:647)
        at android.animation.ValueAnimator.start(ValueAnimator.java:1079)
        at android.animation.ValueAnimator.start(ValueAnimator.java:1098)
        at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)
        at freijer.app.taster.Prob.Next(Prob.java:30)
        at freijer.app.taster.Prob.LVL_UP(Prob.java:17)
        at freijer.app.taster.MainActivity.Go(MainActivity.java:25)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) 
        at android.view.View.performClick(View.java:7125) 
        at android.view.View.performClickInternal(View.java:7102) 
        at android.view.View.access$3500(View.java:801) 
        at android.view.View$PerformClick.run(View.java:27336) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

Отредактировал, выложил только проблемный код. Я так понимаю, что проблема в том, что пытаюсь работать с View-элементом не из Мейна.

Я хотел в идеале сделать, что бы при пи наборе очков и достижении уровня появлялась картинка. Так как подсчет очков идет в отдельном классе, то и появление картинки вставил ту даже. Можно ли так делать, если да, то как? или работа с View-элементами только в Мейне проводить?

Буду рад любым советом, желательно развернуто, потому что хочу не просто сделать, но и максимально полно понять.


Ответы (0 шт):