0
private class AsyncCaller extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        //this method will be running on background thread so don't update UI from here
        //do your long running http tasks here,you don't want to pass argument and u can access the parent class' variable url over here
        new DummyContent().fetchData();
        return null;
    }
}

It throws runtime error where "Excpetion should not have been thrown"

public static void fetchData() {
    // Add some sample items.
    for (int i = 1; i <= COUNT; i++) {
        addItem(createDummyItem(i));
    }

    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(
                    DummyContent.UNAME, DummyContent.PASSWORD.toCharArray());
        }
    });

    try {
        DummyContentRegistry registry = new XMLDummyContentParser(url).parse();
        for (DummyItem t: registry.getTeachers()) {
            addItem(t);
        }
    } catch (Exception e) {
        fail("Exception should not have been thrown");
    }
}

Basically the same question as Failed to call a dynamic method in a static context? after I tried AsyncTask in a similar fashion to How to use AsyncTask correctly in Android .

07-25 05:44:12.080 21933-22106/********.myapplication E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
                                                                                    Process: ***********.myapplication, PID: 21933
                                                                                    java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                                        at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                                        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                                        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                                        at java.lang.Thread.run(Thread.java:818)
                                                                                     Caused by: java.lang.AssertionError: Exception should not have been thrown
                                                                                        at org.junit.Assert.fail(Assert.java:88)
                                                                                        at ***********.myapplication.dummy.DummyContent.fetchData(DummyContent.java:58)
                                                                                        at ***********.myapplication.MainActivity$AsyncCaller.doInBackground(MainActivity.java:205)
                                                                                        at ***********.myapplication.MainActivity$AsyncCaller.doInBackground(MainActivity.java:200)
                                                                                        at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                                        at java.lang.Thread.run(Thread.java:818) 
Community
  • 1
  • 1
Student
  • 29
  • 5

1 Answers1

0

May be here

DummyContentRegistry registry = new XMLDummyContentParser(url).parse();
for (DummyItem t: registry.getTeachers()) {
addItem(t);
}

you make some changes of UI (add some data to list or change some data on it). You receive exception because all actions with UI should be done in Main thread, not in additional thread. That is why in AsyncTast there is onPostExecute method to make some changes in UI after finised doInBackground method

HooliGun
  • 46
  • 3