Ошибка вызова метода с инициализацией
Помогите разобраться, в чем я ошибаюсь?
В 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-элементами только в Мейне проводить?
Буду рад любым советом, желательно развернуто, потому что хочу не просто сделать, но и максимально полно понять.