使用向spinner中ArrayAdapter绑定数据对象出错报线程错误
1.实现的功能:就是实现一个下拉菜单 的功能,然后通过选中的文本获取对应的id值;
2.操作中遇到的问题:
(1)向spinner中ArrayAdapter绑定数据对象出错,ArrayAdapter<String>没有问题,
例如:
String[] endSiteStr = {"请选择","凯旋","马安砖厂"}; adapterTemp = new ArrayAdapter<SiteModel>( getActivity(), android.R.layout.simple_spinner_item , endSiteStr); endSiteSpinner.setAdapter(adapterTemp);
(2)如果是放ArrayAdapter<SiteModel>,就会报线程错误
SiteModel的具体内容:
所有的报错信息:
E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
Process: com.zmz.mypro, PID: 28655
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7021)
at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:3300)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:706)
at android.view.View.setFlags(View.java:9780)
at android.view.View.setFocusable(View.java:6799)
at android.widget.AdapterView.checkFocus(AdapterView.java:728)
at android.widget.AbsSpinner.setAdapter(AbsSpinner.java:124)
at android.widget.Spinner.setAdapter(Spinner.java:438)
at android.support.v7.widget.AppCompatSpinner.setAdapter(AppCompatSpinner.java:393)
at com.zmz.mypro.fragment.BillInputFragment$1$1.onResponse(BillInputFragment.java:119)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:206)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
解决办法:
我是在碎片中使用onInitData()方法,请求远程数据并初始化数据;顾使用getActivity()来获取活动
/*runOnUiThread(() -> {
startSiteSpinner.setAdapter(adapterTemp2);
});*/
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
startSiteSpinner.setAdapter(adapterTemp2);
}
});