使用向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);
                            }
                        });

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章