user2134412
user2134412

Reputation:

android.os.NetworkOnMainThreadException

Why this error usually arise in listview when i run in Android 4.0 version ,could anybody help me regarding this.I searched some sites found like using asynctask in url how could i implement it.

what i have tried: here is the async task

public class GetTask extends AsyncTask<String, Void, Integer> {
    private ProgressDialog progressDialog;
    public GetTask(){
    }
    protected void onPreExecute() {
                   this.progressDialog=new ProgressDialog(FirstActivity.this);
        this.progressDialog.show();
    }
    @Override
    protected Integer doInBackground(String... userurl) {
                         page_count=0;
                         Callpagedetails();
        return null;
    }

    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        if (progressDialog.isShowing())
            progressDialog.dismiss();
          listview = (ListView) findViewById(R.id.listquestion);
         listview.setAdapter(adapterf);
    }
}

Using the code i receive `Null pointer Exception. Here is the log when i try the above code in 4.0 version

04-30 07:25:04.842: E/AndroidRuntime(1654): FATAL EXCEPTION: AsyncTask #1
04-30 07:25:04.842: E/AndroidRuntime(1654): java.lang.RuntimeException: An error occured while executing doInBackground()
04-30 07:25:04.842: E/AndroidRuntime(1654):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.lang.Thread.run(Thread.java:856)
04-30 07:25:04.842: E/AndroidRuntime(1654): Caused by: java.lang.NullPointerException
04-30 07:25:04.842: E/AndroidRuntime(1654):     at com.example.know.FirstActivity.Callpagedetails(FirstActivity.java:227)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at com.example.know.FirstActivity$GetTask.doInBackground(FirstActivity.java:125)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at com.example.know.FirstActivity$GetTask.doInBackground(FirstActivity.java:1)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-30 07:25:04.842: E/AndroidRuntime(1654):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-30 07:25:04.842: E/AndroidRuntime(1654):     ... 4 more

    04-30 06:49:34.781: E/WindowManager(851): Activity com.example.know.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40cd41e8 V.E..... R.....ID 0,0-191,168} that was originally added here
    04-30 06:49:34.781: E/WindowManager(851): android.view.WindowLeaked: Activity com.example.know.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40cd41e8 V.E..... R.....ID 0,0-191,168} that was originally added here
    04-30 06:49:34.781: E/WindowManager(851):   at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354)
    04-30 06:49:34.781: E/WindowManager(851):   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
    04-30 06:49:34.781: E/WindowManager(851):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.Dialog.show(Dialog.java:281)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ProgressDialog.show(ProgressDialog.java:116)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ProgressDialog.show(ProgressDialog.java:99)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ProgressDialog.show(ProgressDialog.java:94)
    04-30 06:49:34.781: E/WindowManager(851):   at com.example.know.FirstActivity$GetTask.<init>(FirstActivity.java:99)
    04-30 06:49:34.781: E/WindowManager(851):   at com.example.know.FirstActivity.onCreate(FirstActivity.java:88)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.Activity.performCreate(Activity.java:5104)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ActivityThread.access$600(ActivityThread.java:141)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    04-30 06:49:34.781: E/WindowManager(851):   at android.os.Handler.dispatchMessage(Handler.java:99)
    04-30 06:49:34.781: E/WindowManager(851):   at android.os.Looper.loop(Looper.java:137)
    04-30 06:49:34.781: E/WindowManager(851):   at android.app.ActivityThread.main(ActivityThread.java:5041)
    04-30 06:49:34.781: E/WindowManager(851):   at java.lang.reflect.Method.invokeNative(Native Method)
    04-30 06:49:34.781: E/WindowManager(851):   at java.lang.reflect.Method.invoke(Method.java:511)
    04-30 06:49:34.781: E/WindowManager(851):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    04-30 06:49:34.781: E/WindowManager(851):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    04-30 06:49:34.781: E/WindowManager(851):   at dalvik.system.NativeStart.main(Native Method)

Could anybody help me regarding this @Thanks

Upvotes: 1

Views: 849

Answers (3)

Pankaj Kumar
Pankaj Kumar

Reputation: 82938

Your current problem in bellow code block

public GetTask(){
        progressDialog = ProgressDialog.show(FirstActivity.this, "Loading","Please Wait");
    }

    protected void onPreExecute() {
        this.progressDialog.setMessage("Progress start");
        this.progressDialog.show();
    }

What happening is, when GetTask() gets called a progressdialog will be shown and after constructor call onPreExecute() will get call and this method again trying to show the same dialog.

You just need to modify your method as ..

public GetTask(){
            //progressDialog = ProgressDialog.show(FirstActivity.this, "Loading","Please Wait");
        }

        protected void onPreExecute() {
            this.progressDialog = new ProgressDialog(yourContext);
            this.progressDialog.setTitle("Loading");
            this.progressDialog.setMessage("Progress start");
            this.progressDialog.show();
        }

Happy codeing :)

Upvotes: 2

Ajit
Ajit

Reputation: 967

This exception is thrown when an application attempts to perform a networking or threading operation on its main thread i.e. in onCreate() method of Activity- there are two solutions for that -

1) Don't do network related work in Main UI Thread, Use Async Task for that.

2) Write below code into your MainActivity file after setContentView(R.layout.main);

 if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

Upvotes: 0

Dhaval Parmar
Dhaval Parmar

Reputation: 18978

remove this method Callpagedetails(); from below code because you are already do this in AsyncTask. no need to use Thread again in AsyncTask

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

                             page_count=0;
                            Callpagedetails();//here i call the url

                 }

just use:

protected Integer doInBackground(String... userurl) {
            // TODO Auto-generated method stub      
                             page_count=0;
                            Callpagedetails(); //here i call the url

                 }

Upvotes: 0

Related Questions