У меня проблема с FATAL EXCEPTION: Thread
Я создал программу, принцип работы, такую программу в режиме редактирования текста, я пишу любые слова, затем, когда я нажимаю кнопку Glide, gif начинает загрузку с URL, а gif начинает загружать анимацию лотереи после загрузки и начинает играть gif.
проблема заключается в том, что когда я запускаю программу и затем нажимаю на кнопку, программа выдает такой ошибка
2020-04-02 19:47:29.494 24812-25040/com.example.askme E/AndroidRuntime: in writeCrashedAppName, pkgName :com.example.askme
2020-04-02 19:47:29.511 24812-25040/com.example.askme E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.askme, PID: 24812
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6899)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1055)
at android.view.View.requestLayout(View.java:19938)
at android.view.View.requestLayout(View.java:19938)
at android.view.View.requestLayout(View.java:19938)
at android.view.View.requestLayout(View.java:19938)
at android.view.View.requestLayout(View.java:19938)
at android.view.View.requestLayout(View.java:19938)
at androidx.constraintlayout.widget.ConstraintLayout.requestLayout(ConstraintLayout.java:3172)
at android.view.View.requestLayout(View.java:19938)
at androidx.constraintlayout.widget.ConstraintLayout.requestLayout(ConstraintLayout.java:3172)
at android.view.View.requestLayout(View.java:19938)
at android.widget.ImageView.setImageDrawable(ImageView.java:529)
at androidx.appcompat.widget.AppCompatImageView.setImageDrawable(AppCompatImageView.java:100)
at com.airbnb.lottie.LottieAnimationView.setImageDrawable(LottieAnimationView.java:231)
at com.airbnb.lottie.LottieDrawable.setComposition(LottieDrawable.java:239)
at com.airbnb.lottie.LottieAnimationView.setComposition(LottieAnimationView.java:503)
at com.airbnb.lottie.LottieAnimationView$2.onResult(LottieAnimationView.java:80)
at com.airbnb.lottie.LottieAnimationView$2.onResult(LottieAnimationView.java:78)
at com.airbnb.lottie.LottieTask.addListener(LottieTask.java:80)
at com.airbnb.lottie.LottieAnimationView.setCompositionTask(LottieAnimationView.java:480)
at com.airbnb.lottie.LottieAnimationView.setAnimation(LottieAnimationView.java:388)
at com.example.askme.MainActivity$ThreadForAnim.run(MainActivity.java:250)
когда я нажимаю на кнопку, этот код работает
public void getData(View view) {
if(!checkConnection()) {
Toast.makeText(this,"No internet connection",Toast.LENGTH_SHORT).show();
return;
}
getApi();
text = editText.getText().toString();
if (!text.equals("")){
editText.setText("");
textView.setVisibility(View.INVISIBLE);
relativeLayout.setVisibility(View.INVISIBLE);
askme.setVisibility(View.INVISIBLE);
imageButton.setVisibility(View.INVISIBLE);
textView3.setVisibility(View.INVISIBLE);
constraintLayout.setVisibility(View.VISIBLE);
lottieAnimationView.setVisibility(View.VISIBLE);
textView2.setVisibility(View.VISIBLE);
threadForAnim.start();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
PlayGif();
}
}, 2000);
}
else Toast.makeText(this, "Please enter your question!", Toast.LENGTH_SHORT).show();
}
public void PlayGif(){
Glide.with(this)
.asGif().load(gif)
.apply(new RequestOptions()
.error(R.drawable.ic_action_name))
.listener(new RequestListener<GifDrawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
Log.e("status", "gif loaded");
handler.removeCallbacks(threadForAnim);
lottieAnimationView.cancelAnimation();
lottieAnimationView.setVisibility(View.INVISIBLE);
textView2.setVisibility(View.INVISIBLE);
constraintLayout.setVisibility(View.VISIBLE);
textView3.setText(text);
textView3.setVisibility(View.VISIBLE);
askme.setVisibility(View.VISIBLE);
imageButton.setVisibility(View.VISIBLE);
gifView.setVisibility(View.VISIBLE);
Log.e("status", "removeCallbacks");
return false;
}
}).into(gifView);
}
class ThreadForAnim extends Thread{
@Override
public void run() {
super.run();
Log.e("status", "run");
lottieAnimationView.setAnimation("data.json");
lottieAnimationView.loop(true);
lottieAnimationView.playAnimation();
}
}
Помогите создать эту программу благодаря большое