Ik ben momenteel bezig met het debuggen van een Androidapplicatie die ik zo'n anderhalf jaar geleden voor het laatst aangeraakt heb. In die tijd heeft er ook niemand anders aan gewerkt, maar blijkbaar is er wel iets stuk gegaan: de progress dialog die ik ingebouwd had in de downloader class die ik gebouwd heb wil niet meer tonen.
Ik heb een class DownloadTask die is afgeleid van een class CommunicationTask (er is ook een UploadTask, vandaar). CommunicationTask is gedefinieerd als volgt:
Zoals je kan zien heb ik dus gewoon zoals het hoort een AsyncTask gemaakt zoals voor progressbars gebruikelijk is.
Mijn onProgressUpdate-method in de DownloadTask ziet er als volgt uit:
Simpelweg debuggen toont aan dat de method netjes gerund wordt. Bij de eerste keer kom ik netjes binnen die eerste if op regel 5 en maakt hij zoals verwacht de dialog aan. Ook komt hij aan bij de dialog.show() op regel 18 en voert deze succesvol uit. Echter wordt de dialog niet getoond. De tweede if op regel 20 wordt ook netjes binnengetreden, maar omdat de progress nog 0 is wordt de dialog niet gedismisst. Dit heb ik uiteraard gecheckt.
Bij de eerstvolgende call naar de method is alle data al binnen (het is maar een kleine file). De eerste if treden we niet meer binnen omdat dialog niet meer null is. De tweede wel, en omdat progress nu groter of gelijk aan de filesize is wordt de dialog (die tot dan toe nooit in beeld is geweest) weer gedismisst.
Het vreemde is dus dat dit anderhalf jaar geleden nog gewoon werkte. Het lijkt alsof een van de Android-updates sindsdien iets gesloopt heeft, maar ik zou niet weten wat dat kan zijn. Heeft iemand enig idee?
Ik heb een class DownloadTask die is afgeleid van een class CommunicationTask (er is ook een UploadTask, vandaar). CommunicationTask is gedefinieerd als volgt:
Java:
1
| public abstract class CommunicationTask extends AsyncTask<Void, Integer, CommunicationTask> implements Comparable<CommunicationTask> { ... } |
Zoals je kan zien heb ik dus gewoon zoals het hoort een AsyncTask gemaakt zoals voor progressbars gebruikelijk is.
Mijn onProgressUpdate-method in de DownloadTask ziet er als volgt uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| protected void onProgressUpdate(Integer... progress) { MyApp app = MyApp.getInstance(); // Deze naamgeving even aangepast, reclame leek me niet nodig if (callingActivity != null && (dialog == null || !dialog.isShowing())) { dialog = new ProgressDialog(callingActivity); dialog.setTitle(app.getString(com.mycompany.android.myapp.R.string.dialog_downloading_title)); dialog.setMessage(description); if (fileSize > -1) { dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setMax(fileSize); } else dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setProgress(0); dialog.show(); } if (dialog != null) { int p = progress[0]; dialog.setProgress(p); if (p >= fileSize) dialog.dismiss(); } } |
Simpelweg debuggen toont aan dat de method netjes gerund wordt. Bij de eerste keer kom ik netjes binnen die eerste if op regel 5 en maakt hij zoals verwacht de dialog aan. Ook komt hij aan bij de dialog.show() op regel 18 en voert deze succesvol uit. Echter wordt de dialog niet getoond. De tweede if op regel 20 wordt ook netjes binnengetreden, maar omdat de progress nog 0 is wordt de dialog niet gedismisst. Dit heb ik uiteraard gecheckt.
Het vreemde is dus dat dit anderhalf jaar geleden nog gewoon werkte. Het lijkt alsof een van de Android-updates sindsdien iets gesloopt heeft, maar ik zou niet weten wat dat kan zijn. Heeft iemand enig idee?
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.