Android - ViewRootImpl$CalledFromWrongThreadException

≯℡__Kan透↙ 提交于 2019-11-27 05:15:02

Put this in onCreate()

ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.order);
        imageView = (ImageView)findViewById(R.id.imgView);
        new DownloadFilesTask().execute();       
    } 

And your AsyncTask class should be like this,

        private class DownloadFilesTask extends AsyncTask<Void, Void, Void> {
             Drawable drawable;

             @Override
             protected Void doInBackground(Void... params) {
             drawable = createDrawableFromURL(
                                   "http://savagelook.com/misc/sl_drop2.png");
              return null;
             }
             protected void onPostExecute(Void result) {
                    imageView.setImageDrawable(drawable);
            }          
        } 

I got the same problem trying to change UI view from c++ using JNI. The solution was use

runOnUiThread(new Runnable() {
    public void run(){   
    }
});

runOnUiThread is an Activity method so I have to make my activity instance public static to be able to call on my public static method who later call from JNI.

Hope this help others :)

PS: from here I learn how to use JNI http://www.cocos2d-x.org/projects/cocos2d-x/wiki/How_to_use_jni for my android game previously made with cocos2dx

I think this line is causing the error..

  imageView.setImageDrawable(createDrawableFromURL("http://savagelook.com/misc/sl_drop2.png"));

and the error explains why it is so..

     Only the original thread that created a view hierarchy can touch its views.

this error is caused because you are trying to change the User Interface on mainthread from some other thread.. here doInBackground in your case...

If you would like to do this job in fragment, you should call UI thread from activity in fragment.

getActivity().runOnUiThread(new Runnable() {
  public void run(){

    ... //your job 

  }
});

@canerkaseler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!