如何修复Android Fragment中的“只有创建视图层次结构的原始线程才能触摸其视图”?

瑜伽hilmi tasanah

我的下面的代码有问题

public class StatusFragment extends Fragment {



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment_status, container, false);

        //Untuk menjalankan command dari API
        {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    final TextView tv0 = (TextView) view.findViewById(R.id.textView0);
                    final TextView tv1 = (TextView) view.findViewById(R.id.textView1);
                    final TextView tv2 = (TextView) view.findViewById(R.id.textView2);
                    final TextView tv3 = (TextView) view.findViewById(R.id.textView3);
                    final TextView tv4 = (TextView) view.findViewById(R.id.textView4);
                    final TextView tv5 = (TextView) view.findViewById(R.id.textView5);
                    final TextView tv6 = (TextView) view.findViewById(R.id.textView6);
                    final TextView tv7 = (TextView) view.findViewById(R.id.textView7);
                    final TextView tv8 = (TextView) view.findViewById(R.id.textView8);

                    ApiConnection con = MainActivity.getCon();
                    if (con !=null)
                        try {

                            //Untuk Menampilkan Resource dari Mikrotik
                            String rs = con.execute("/system/resource/print interval=3",
                                    new ResultListener() {

                                        public void receive(Map<String, String> result) {
                                            tv0.setText(result.get("platform"));
                                            tv1.setText(result.get("board-name"));
                                            tv2.setText(result.get("version"));
                                            tv3.setText(result.get("uptime"));
                                            tv4.setText(String.format("%s %%", result.get("cpu-load")));
                                            tv5.setText(String.format("%s MB", Integer.parseInt(result.get("free-memory")) / (1024*1024)));
                                            tv6.setText(String.format("%s MB", Integer.parseInt(result.get("total-memory")) / (1024*1024)));
                                            tv7.setText(String.format("%s MB", Integer.parseInt(result.get("free-hdd-space")) / (1024*1024)));
                                            tv8.setText(String.format("%s MB", Integer.parseInt(result.get("total-hdd-space")) / (1024*1024)));
                                        }

                                        public void error(MikrotikApiException e) {
                                            System.out.println("An error occurred: " + e.getMessage());
                                        }

                                        public void completed() {
                                            System.out.println("Asynchronous command has finished");
                                        }
                                    }

                            );


                        } catch (MikrotikApiException e) {
                            e.printStackTrace();
                        }
                }
            });


        }

        return view;
    }

}

---------崩溃开始

05-10 08:26:58.797 7122-7164 / com.tasanahetech.mikroboxv2 E / AndroidRuntime:致命例外:Mikrotik API结果处理器进程:com.tasanahetech.mikroboxv2,PID:7122 android.view.ViewRootImpl $ CalledFromWrongThreadException:仅原始创建视图层次结构的线程可以触摸其视图。在android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6556)在android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:907)在android.view.View.requestLayout(View.java:18722)在。在android.view.View.requestLayout(View.java:18722)在android.view.View.requestLayout(View.java:18722)在android.view.View.requestLayout(View.View.requestLayout(View.java:18722) .java:18722),位于android.view.View.requestLayout(View.java:18722),位于android.widget.RelativeLayout.requestLayout(RelativeLayout.java:360),位于android.view.View.requestLayout(View。

谢谢

石林

解决问题的最快方法是,将receive()函数中的所有“ tv0.setText()”调用包装到另一个“ runOnUiThread”块中。像这样:

public void receive(Map<String, String> result) {
  getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
      tv0.setText(result.get("platform"));
      tv1.setText(result.get("board-name"));
      tv2.setText(result.get("version"));
      tv3.setText(result.get("uptime"));
      tv4.setText(String.format("%s %%", result.get("cpu-load")));
      tv5.setText(String.format("%s MB", Integer.parseInt(result.get("free-memory")) / (1024*1024)));
      tv6.setText(String.format("%s MB", Integer.parseInt(result.get("total-memory")) / (1024*1024)));
      tv7.setText(String.format("%s MB", Integer.parseInt(result.get("free-hdd-space")) / (1024*1024)));
      tv8.setText(String.format("%s MB", Integer.parseInt(result.get("total-hdd-space")) / (1024*1024)));
  });
}

并且可以删除外面的“ getActivity()。runOnUiThread”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android“只有创建视图层次结构的原始线程才能触摸其视图。” 片段错误

Android“只有创建视图层次结构的原始线程才能触摸其视图。”

只有创建视图层次结构的原始线程才能触摸其视图。在Android上

Android:只有创建视图层次结构的原始线程才能在调用invalidate()时触摸其视图

android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触摸其视图。(RxJava)

AsyncTask:只有创建视图层次结构的原始线程才能触摸其视图。(android.view.ViewRootImpl $ CalledFromWrongThreadException :)

如何解决错误:只有创建视图层次结构的原始线程才能触摸其视图

变得很奇怪“只有创建视图层次结构的原始线程才能触摸其视图。” 我的Android Weather应用程式发生错误

Xamarin Android中出现进度对话框错误:“只有创建视图层次结构的原始线程才能触摸其视图”

“只有创建视图层次结构的原始线程才能触及它的视图。”在我的情况下如何解决这个崩溃?

只有创建视图层次结构的原始线程才能触摸其视图。RxAndroid

SQLite错误:只有创建视图层次结构的原始线程才能触摸其视图

只有创建视图层次结构的原始线程才能触摸其视图-FATAL EXCEPTION

尝试获取位置-只有创建视图层次结构的原始线程才能触摸其视图。

只有创建视图层次结构的原始线程才能触摸其视图突然错误

只有创建视图层次结构的原始线程才能触摸其视图吗?

只有创建视图层次结构的原始线程才能使用Rxjava触摸其视图

只有创建视图层次结构的原始线程才能触摸其视图。更新然后崩溃

Android“的只有创建视图层次原来的线程可以触摸自己的观点。” 错误的for循环

“只有创建视图层次结构的原始线程才能触摸其视图。” 使用TimerTask时出错

AsyncTask:无法从publishProgress更新UI。错误:只有创建视图层次结构的原始线程才能触摸其视图。

editText Box的计时器:只有创建视图层次结构的原始线程才能触摸其视图

当我单击浮动操作按钮时,我的应用程序崩溃:只有创建视图层次结构的原始线程才能触摸其视图

Android获取Facebook用户名例外,仅创建视图层次结构的原始线程

React native:“只有创建视图层次结构的原始线程才能触及其视图”

片段测试:只有创建视图层次结构的原始线程才能触及其视图

RxJava:即使在订阅主线程后,“只有创建视图层次结构的原始线程才能触及其视图”

如何根据其地址在“调试视图层次结构”中查找视图?

Gmail应用如何实现其平面视图层次结构?