add view (text view) in AsyncTask

android, android-asynctask, java, view

Solution

run the UI thread in background method like that

@Override
        protected Void doInBackground(Void... arg0) {
            this.runOnUiThread(new Runnable() {
            public void run() {
                addTextView(R.id.tvResult, 1234, "s");
        });
            return null;
        }

Problem

I used below code for add text view in Async task but : ``` 07-26 11:40:39.302: E/AndroidRuntime(26715): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception 07-26 11:40:39.312: E/AndroidRuntime(26715): java.lang.RuntimeException: An error occured while executing doInBackground() 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.os.AsyncTask$3.done(AsyncTask.java:200) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.lang.Thread.run(Thread.java:1096) 07-26 11:40:39.312: E/AndroidRuntime(26715): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.ViewRoot.checkThread(ViewRoot.java:2683) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.ViewRoot.invalidateChild(ViewRoot.java:570) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:596) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2481) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.View.invalidate(View.java:5027) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.ViewGroup.addView(ViewGroup.java:1840) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.view.ViewGroup.addView(ViewGroup.java:1821) 07-26 11:40:39.312: E/AndroidRuntime(26715): at com.learning.chiazi.MainActivity.addTextView(MainActivity.java:180) 07-26 11:40:39.312: E/AndroidRuntime(26715): at com.learning.chiazi.MainActivity$Proccess.doInBackground(MainActivity.java:243) 07-26 11:40:39.312: E/AndroidRuntime(26715): at com.learning.chiazi.MainActivity$Proccess.doInBackground(MainActivity.java:1) 07-26 11:40:39.312: E/AndroidRuntime(26715): at android.os.AsyncTask$2.call(AsyncTask.java:185) 07-26 11:40:39.312: E/AndroidRuntime(26715): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 07-26 11:40:39.312: E/AndroidRuntime(26715): ... 4 more 07-26 11:40:39.342: E/SemcCheckin(26715): Get crash dump level : java.io.FileNotFoundException: /data/semc-checkin/crashdump ``` How can i fixed this? Code: ``` public void addTextView(int belowId, int id,String text){ RelativeLayout rSub= (RelativeLayout) findViewById(R.id.rSub); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.BELOW, belowId); lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); TextView tv = new TextView(this); tv.setId(id); tv.setText(text+"\n"); rSub.addView(tv, lp); } class Proccess extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... arg0) { addTextView(R.id.tvResult, 1234, "s"); return null; } } ```

Original source