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"