我遇到以下问题。
我在 Class1
中有一个 RewardedVideoListener
,并且希望在 Class2
中立即创建一些 View INVISIBLE
播放奖励视频。
问题是我收到以下错误:
2019-10-20 22:13:48.336 13565-13587/com.myapp.nameE/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.fujigames.memesoundboard, PID: 13565
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6855)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1075)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:5242)
at android.view.View.invalidateInternal(View.java:13574)
at android.view.View.invalidate(View.java:13538)
at android.view.View.setFlags(View.java:11447)
at android.view.View.setVisibility(View.java:8001)
at com.myapp.name.MainActivity.onRewardedVideoAdRewarded(MainActivity.java:449)
at com.ironsource.mediationsdk.sdk.ListenersWrapper$7.run(ListenersWrapper.java:198)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at com.ironsource.mediationsdk.sdk.ListenersWrapper$CallbackHandlerThread.run(ListenersWrapper.java:499)
这是Class1
中的方法,当奖励视频刚刚结束时调用:
@Override
public void onRewardedVideoAdRewarded(Placement placement) {
Class2 cl2 = new Class2();
cl2.greyBackgroundcl2 = (ImageView) findViewById(R.id.greyBackgroundcl2);
cl2.adtextcl2 = (TextView)findViewById(R.id.adtextcl2);
cl2.showcl2 = (Button) findViewById(R.id.showVideocl2);
cl2.showcl2.setVisibility(View.INVISIBLE);
cl2.greyBackgroundcl2.setVisibility(View.INVISIBLE);
cl2.adtextcl2.setVisibility(View.INVISIBLE);
}
这是Class2
(一个 fragment
)
public class Class2 extends Fragment {
public Button showcl2;
public ImageView greyBackgroundcl2;
public TextView adtextcl2;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView=inflater.inflate(R.layout.tab5_layout,container,false);
mLayout=rootView.findViewById(R.id.tab5);
}
}
我对 Android Studio 还很陌生,因此我尝试自行修复它,但在 Google 上没有找到好的答案。
如何防止应用程序崩溃? (奖励视频一结束就崩溃)
提前致谢。
最佳答案
像这样更改 onRewardedVideoAdRewarded 方法
@Override
public void onRewardedVideoAdRewarded(Placement placement) {
final Class2 cl2 = new Class2();
cl2.greyBackgroundcl2 = (ImageView) findViewById(R.id.greyBackgroundcl2);
cl2.adtextcl2 = (TextView)findViewById(R.id.adtextcl2);
cl2.showcl2 = (Button) findViewById(R.id.showVideocl2);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
cl2.showcl2.setVisibility(View.INVISIBLE);
cl2.greyBackgroundcl2.setVisibility(View.INVISIBLE);
cl2.adtextcl2.setVisibility(View.INVISIBLE);
}
});
}
关于java - "Only the original thread that created a view hierarchy can touch its views. "如何解决我的情况下的崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58477049/