-2

Got Fatal Exception in Asynctask while loading on doInBackground method.How can I solve this problem.

This is the OnCreate method:

                super.onCreate(savedInstanceState);
                setContentView(R.layout.single_list_item);
                reload();
                Intent in = getIntent();
                this.link = in.getStringExtra("link");
                String link = in.getStringExtra(KEY_LINK);
                this.web = (WebView) findViewById(R.id.webView1);
                TextView Desc = (TextView) findViewById(R.id.description_label);
                loadStuff localloadStuff = new loadStuff();
                String[] arrayofString = new String[1];
                arrayofString[0] = this.link;
                localloadStuff.execute(arrayofString);

This is the Asyntask Class:

            public class loadStuff extends AsyncTask<String, Void, Void> {
                    public loadStuff() {
                    }
                    @Override
                    protected Void doInBackground(String... params) {
                        SingleItemActivity.this.link = SingleItemActivity.this.link
                                .replace("http://www.", "http://m.");
                        SingleItemActivity.this.web.getSettings()
                                .setJavaScriptEnabled(true);
                        SingleItemActivity.this.web.loadUrl(SingleItemActivity.this.link);
                        SingleItemActivity.this.web.setWebViewClient(new WebViewClient());
                        return null;
                    }

LogCat ERROR:

    08-26 18:33:35.753: E/AndroidRuntime(14945): FATAL EXCEPTION: AsyncTask #1
    08-26 18:33:35.753: E/AndroidRuntime(14945): Process: com.example.sliding_activity, PID: 14945
    08-26 18:33:35.753: E/AndroidRuntime(14945): java.lang.RuntimeException: An error occured while executing doInBackground()
    08-26 18:33:35.753: E/AndroidRuntime(14945):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
    08-26 18:33:35.753: E/AndroidRuntime(14945):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
Anirudh Sharma
  • 7,968
  • 13
  • 40
  • 42

3 Answers3

0
 public class loadStuff extends AsyncTask<String, Void, Void> {
      public loadStuff() {
      }
      @Override
      protected Void doInBackground(String... params) {
          SingleItemActivity.this.link = SingleItemActivity.this.link
                  .replace("http://www.", "http://m.");
          SingleItemActivity.this.web.getSettings()
                  .setJavaScriptEnabled(true);

          return null;
      }
    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
         SingleItemActivity.this.web.loadUrl(SingleItemActivity.this.link);
         SingleItemActivity.this.web.setWebViewClient(new WebViewClient());
    }


  }

Don't update UI in doInBackground method

Tabassum Latif
  • 247
  • 2
  • 15
  • It would be so much better if you mentioned that in the answer itself, not as a comment below it ... – 2Dee Aug 26 '15 at 12:52
0

You are trying to access the webview in doInBackground() method. You cannot do any UI work in doInBackground(). if you do so it will fail.

Refer this link : java.lang.RuntimeException: An error occured while executing doInBackground()

Community
  • 1
  • 1
Chatura Dilan
  • 1,502
  • 1
  • 16
  • 29
0

You don't really need an AsyncTask for this operation. The issue you are having is that you are trying to update the UI thread from a background thread. In fact, you could simply have wrote this and will work

super.onCreate(savedInstanceState);
setContentView(R.layout.single_list_item);
reload();
Intent in = getIntent();
this.link = in.getStringExtra("link");
String link = in.getStringExtra(KEY_LINK);
this.web = (WebView) findViewById(R.id.webView1);
TextView Desc = (TextView) findViewById(R.id.description_label);
loadStuff localloadStuff = new loadStuff();
String[] arrayofString = new String[1];
arrayofString[0] = this.link;
localloadStuff.execute(arrayofString);
SingleItemActivity.this.link = SingleItemActivity.this.link
                            .replace("http://www.", "http://m.");
SingleItemActivity.this.web.getSettings()
                            .setJavaScriptEnabled(true);
SingleItemActivity.this.web.loadUrl(SingleItemActivity.this.link);
SingleItemActivity.this.web.setWebViewClient(new WebViewClient());
hacksy
  • 830
  • 5
  • 14