Skip to content Skip to sidebar Skip to footer

Show Progressdialog During A Network Call Until It's Finished

I am very frustrated as I've been trying to implement a super simple loading wheel while waiting on a network call. I have searched and read dozens of SO questions and I just feel

Solution 1:

Maybe this will work, I haven't tested, but you can try:

publicclassMyTaskextendsAsyncTask<String, Void, String> {
    private int flag;


    publicMyTask(int flag) {
        this.flag = flag;
    }


    @OverrideprotectedStringdoInBackground(String... params) {
        switch (flag) {
            case1:
                returndoNetworking1();
            break;
            case2:
                returndoNetworking2();
            break;
            case3:
                returndoNetworking3();
            break;
            default:
                returndoNetworking1();

        }
    }

    @OverrideprotectedvoidonPreExecute() {
        //show progress dialog
    }

    @OverrideprotectedvoidonPostExecute(String s) {
        //hide progress dialogswitch (flag) {
            case1: //do something with resultnewMyTask(2).execute();
                break;
            case2: //do other stuffnewMyTask(3).execute();
                break;
            case3: //do event more stuffbreak;
            default:
                //do something
        }
    }
}

and usage:

new MyTask(1).execute();

Solution 2:

In cases of network connections I would use IntentService instead of AsyncTask.

For example create IntentServices for network connection:

publicclassNetworkCallIntentServiceextendsIntentService {
    publicstaticfinalStringBROADCAST_ACTION="com.yourpackage:NETWORK_CALL_BROADCAST";
    publicstaticfinalStringRESULT="com.yourpackage:NETWORK_CALL_RESULT";

    publicNetworkCallIntentService() {
        super(NetworkCallIntentService.class.getSimpleName());
    }

    @OverrideprotectedvoidonHandleIntent(Intent intent) {
        // get data from intent if needed// do the call that takes long time  // send broadcast when doneIntentintent=newIntent(BROADCAST_ACTION);
        intent.putExtra(RESULT, "some_result");//and more results
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }
}

Next, start that service from activity, show progress dialog and move code responsible for showing next screen to BroadcastReceiver#onReceive() method:

publicclassSomeActivityextendsActivity {

    @OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //start serviceIntent serviceIntent = newIntent(this, NetworkCallIntentService.class);
        //put extras into intent if needed//serviceIntent.putExtra("some_key", "some_string_value");startService(serviceIntent);
        //here just show progress bar/progress dialog
    }

    @OverrideprotectedvoidonResume() {
        super.onResume();
        LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(mNetworkCallReceiver,
                newIntentFilter(NetworkCallIntentService.BROADCAST_ACTION));
    }

    @OverrideprotectedvoidonPause() {
        super.onPause();
        LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(mNetworkCallReceiver);
    }

    privateBroadcastReceiver mNetworkCallReceiver = newBroadcastReceiver() {

        @OverridepublicvoidonReceive(Context context, Intent intent) {
            //hide progress bar/progress dialog//here get results from intent extrasString result = intent.getStringExtra(NetworkCallIntentService.RESULT);
            //process results and continue program(go to next screen, show error message etc.)
        }

    }

}

Declare service in manifest file:

<serviceandroid:name="com.yourpackage.DownloadSvtValuesIntentService"android:exported="false" ></service>

Post a Comment for "Show Progressdialog During A Network Call Until It's Finished"